MySQL基础教程3-DDL(创建表)

  • 注意: 撰写本文目的主要是为了给自己做一个备忘录,如果你学过Mysql并且希望从本文中找到一些忘记的知识点,那么你可以阅读本文章。由于文章内讲解并不是很多,因此此文章并不适合小白入门使用。

DDL-创建表

  • 所谓建表,就是一个声明字段的过程
    列选什么类型,列选什么属性

简单建个表:

create table people(
     -> age int,
     -> name varchar(10)
     -> );

建表语句:

建表语句

一、列

列的类型:

  • 数值型---整形、型,浮点型,定点型
  • 字符串型---char,varchar,text
  • 日期时间类型---2020-12-30 23:59:59

1.1.整型列

(1).各整型类型所占字节大小:

各整型类型所占字节大小

(2).整型列可选参数:

  • unsigned: 无符号,列的值从0开始,不为负
  • zerofill: 适用于 学号、编码 等,固定宽度的数字,可以用0填充至固定宽度
    学号-->1-->0001
    学号-->123-->0123
    思路: zerofill填充至多宽?M
    注意: zerofill属性默认决定列为unsigned类型
  • M: 为zerofill 指定填充的宽度。只使用M没有任何意义,必须配合zerofill使用
    注意: M的数值不是为了限制数值宽度,只是为了当数值宽度不到M时,为其填充至宽度为M

例:

/* 为user表添加带有unsigned属性的number字段 */
alter table user add number tinyint unsigned;

/* 为user表添加带有zerofill属性的number字段,并为其指定宽度 */
alter table user add number tinyint(5) zerofill;

1.2.浮点列与定点列

  • flocat(M,D): 浮点型
    M是精度,即总位数
    D是标度,即小数点后面的位数
  • double: 浮点型
  • decimal: 定点型
    float/double浮点型数据会有精度损失,decmail定点型,更精确

float/double官方文档:

float/double官方文档

1.3.字符型

MySQL字符串类型:

  • Char: 定长类型
    char型,传入数据如果不够M个字符,内部用空格补齐,取出时再把右侧空格删掉。这意味着:如果数据本身右侧有空格,将会丢失
  • Varchar: 变长类型

注意:char(M)限制的是字符,不是字节。即char(2) charset utf8,能存两个utf8字符,比如中国;
**char与varchar型的选择原则:

  • 1.空间利用率:
    四字成语表:char(4);
    微博个人简介140字:varchar(140)
  • 2.速度:
    用户名: char

Char与Varchar:

MySQL字符串类型

Char右侧空格丢失:
注: 从截图中可以看出,最后输出的数据中的char型数据丢失了右侧的空格
Char右侧空格丢失

其他类型的字符类型及容量:

  • Text: 文本类型,可以存比较大的文本段,搜索速度慢。因此,如果不是特别大的内容,建议用char、varchar来代替。test不用默认值(加了也没用)
  • Blob:二进制类型,用来存储图像、音频等二进制信息。
    意义:2进制,0-255都有可能出现。Blob在于防止因为字符集而导致信息丢失的问题。比如: 一张图片中有0xFF字节,这个在ascii字符集中认为非法,在入库的时候被过滤了。
  • Enum:枚举类型。意思是值是定义好的,就在几个枚举范围内。
    例: gender('男','女');insert时只能选"男","女"。
  • Set:同Enum。但insert时可同时选多个值。
其他类型的字符类型及容量

1.4.日期时间类型

日期时间类型

二、列的默认值

列的默认值

  • 1.NULL 查询不便
  • 2.NULL的索引效果不高
    所以,实用中要避免列的值为NULL
  • 如何避免--声明列 :
    NOT NULL default 默认值

三、主键与自增

  • 主键:primary key,此列不重复,能够区分每一行
/* 第一重指定方式 */
create table t1(
     -> id int primary key,
     -> name char(2)
);
/* 第一重指定方式 */
create table t2(
     -> id int,
     -> name char(2),
     -> primary key(id)
);
  • 自增(auto_increment): 一张表只能有1列为auto_increment,且此列必须加索引(index/key)
    一般实用中自增与主键搭配使用
create table t3(
     -> id int auto_increment,
     -> name char(2),
     -> key id(id)
);
  • 表设计案例:某社交网站

建表秘诀:
1.定长与变长分离
2.常用与不常用分离

表设计案例

上面表设计的并不是很好,还可以优化
分析:张这表除了username/intro列之外,每一行都是定长的,我们不妨让其所有列都定长。可以极大地提高查询速度。
表设计优化

MySQL建立上述表表指令:

create table regist3(
    -> id int unsigned primary key auto_increment,
    -> username char(10) not null default ' ',
    -> gender tinyint not null default 0,
    -> weight tinyint unsigned not null default 0,
    -> Birth Date not null default '0000-00-00',
    -> Salary Decimal(8,2) not null default '000000.00',
    -> lastlogin int unsigned not null default 0
);

create table regist1(
    -> id int unsigned primary key auto_increment,
    -> username char(10) not null default ' ',
    -> intro varchar(1500) not null default ''
);

效果图:

效果图

四、列的增删改

4.1.添加列

/*格式:*/
alter table 表名
     -> add 列名 列类型 列属性... 
注意: 默认将该列添加到表的最后

/*实例1:*/
alter table student
     -> add height tinyint unsigned not null default 0;

/*实例2: 添加到weight列后面*/
alter table student
     -> add height tinyint unsigned after weight;

4.2.删除列

alter table student
     -> drop column height;

4.3.修改列

/*修改列名并修改该列的属性*/
alter table student
     -> change height shengao smallint;

/*修改列的属性*/
alter table student
     -> change shengao tinyint;

五、表管理语句

5.1.查看所有表

show tables;

5.2.查看表结构

desc 表名/视图名;

5.3.查看建表过程

/*查看建表过程*/
show create table 表名;

/*查看建视图过程*/
show create view 视图名;

5.4.查看表详细信息

/*查看所有表详细信息*/
show table status;

/*查看某张表详细信息*/
show table status where name='表名';

/*竖列显示表信息*/
show table status \G;

5.5.删除表

/*删除表*/
drop table 表名;

/*删除视图*/
drop view 视图名;

5.6.为表改名

rename table oldName to newName;

5.7.清空表数据

truncate 表名;
/*相当于删除表,再重建*/

友情链接:

MySQL基础教程全网最全1(基本指令操作)
MySQL基础教程2-DQL(select查询)
MySQL基础教程4-细节知识点

文集推荐:

Java基础方法集1
Python基础知识完整版
Spring Boot学习笔记
Linux指令进阶
Java高并发编程
SpringMVC基础知识进阶
Mysql基础知识完整版
健康管理系统学习花絮(学习记录)
Node.js基础知识(随手笔记)
MongoDB基础知识
Dubbo学习笔记
Vue学习笔记(随手笔记)

声明:发表此文是出于传递更多信息之目的。若有来源标注错误或侵犯了您的合法权益,请作者持权属证明与本我们(QQ:981086665;邮箱:981086665@qq.com)联系联系,我们将及时更正、删除,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • 本文基于MySQL5.6版本进行描述从大的方面来讲,MySQL的数据类型分为4种 数值类型 日期和时间 字符串类型...
    黑哥儿666阅读 746评论 0 0
  • 数据库基础知识 数据库客户端MySQL作为数据库服务器来运行,任何满足mysql通信规范的软件都可以作为客户端来连...
    littlexjing阅读 904评论 0 2
  • 回顾 数据库基础知识:关系型数据库(磁盘)和非关系型数据库(内存) 关系型数据库:建立在关系模型上的数据库数据结构...
    翊溪阅读 527评论 0 1
  • Mysql 基础 SQL分类: DDL—数据定义语言(create,alter,drop)DML—数据操纵语言(s...
    零一间阅读 5,213评论 0 10
  • 一年又一年,字节跳动 Lark(飞书) 研发团队又双叒叕开始招新生啦!【内推码】:GTPUVBA【内推链接】:ht...
    卢卡斯哔哔哔阅读 806评论 0 9