1.not null空属性 和 default缺省值
两个值:null(默认的)和not null(不为空)
元素可以分为两类
1.not null 不能为空的,这种没有默认default 要手动设定,我们必须插入数据而且不能为NULL。但我们插入数据有两种方式 1.直接输入值 2.不输入用缺省值填入 当然缺省值不能为NULL。
2.另一种可以为null 这种default 缺省值默认为NULL. 也就是说不输入也可以自动用缺省值 直接输入值当然NULL也可以。
字段类型 是否允许 NULL 默认行为 是否需要写 DEFAULT
手动设置NOT NULL
否 必须插入值 或 显式写 default ✅ 是,默认没有默认值 允许为 NULL
是 若不插入则默认default是 NULL ❌ 可选,默认就是 NULL ![]()
简单来说 什么类型的必须输入值呢?not null不能为空 且没有手动设置缺省值default
![]()
![]()
2.列描述comment
列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
简单来说 就是在创建字段时 对该字段的注释
查看时 可以在show create table 表名\G
3.int(10)和zerofill
int(10) unsigned int(11)和zerofill。int不就是4字节大小吗?后面的(10) (11)是什么?
简单来说()里面的值和实际的存储空间大小没有关系。主要是配合zerofill使用,
1.创建时不加 zerofill 查找显示处理的数据 如果值为1 就显示1.
2.如果加上zerofill 类型int(10) 就会显示0000 0000 01,简单来说加上zerofill就是至少要显示10位数 前面空的补0,如果是int(1) 值为200 加上zerofill 会显示200 所以说是至少.
还要一个细节 为什么无符号默认是(10) 有符号(11) ,10位数可以表示所有的int值 但有符号数可以是负数要带上 - 所以要多一位 11.zerofill是 显示格式,不改变实际值或大小 带上zerofill 自动加上unisgned表示无符号
字段定义 插入值 显示结果(不带 ZEROFILL) 显示结果(带 ZEROFILL) INT(5)
42
42
00042
INT(10) ZEROFILL
1
— 0000000001
INT(3) ZEROFILL
200
— 200
✅ 不会截断![]()
为什么有符号是INT(11)
,无符号是INT(10)
?
类型 默认宽度 原因说明 INT UNSIGNED
10 最大值 4,294,967,295
,最多10位数INT
11 还要预留 1 位给 -
负号
4.主键primary key
在创建字段的后面加上primary key表示该字段为key值,不能在表中继续插入key值相同的行。
自动设置为不能为NULL 主键不能为NULL
1.删除主键
alter table 表名 add primary key;
2.追加主键(add主键时 表中不能有主键)
不建议在中途加主键 因为不知道原数据中是否有主键相同的行
alter table 表名 add primary key(字段列表);
复合主键
在 MySQL 中,创建复合主键(Composite Primary Key)就是让多个字段一起组成一个唯一标识,这几个字段组合起来不能重复,但每个字段单独可以重复。
方法1:建表时直接写在最后统一定义
方法2:表创建后用 alter table add 添加复合主键
要点 | 说明 |
---|---|
每个字段本身可以重复 | 但组合值不能重复 |
所有字段必须 NOT NULL | 即使你没写,MySQL 会自动加 NOT NULL |
一张表只能有一个主键 | 加复合主键前,要确保没有其他 PRIMARY KEY |
5.自增长auto_increment
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
自增长字段必须是整数
一张表最多只能有一个自增长简单总结:auto_increment
1.字段必须为整数 2.key一栏有值 3.只能有一个自增
为什么能知道下一个自增数是什么 就是因为在表级定义部分中记录了下一个自增数
提前更改auto_increment的值
alter table t_auto auto_increment = 100;
6.唯一键unique
主键:1.非空 2.字段值唯一 3.只能有一个主键
唯一键:1.可以为空 2.字段值唯一 3.可以有多个唯一键
主键是主身份标识,一张表只能有一个.唯一键是辅助性唯一约束,可以多个,用于保证其他字段不重复。唯一键也可以加上not null表示不能为空
如何创建唯一键?
和设置主键方法一样
1.字段后加 unique
2.统一在末尾定义 unique key (字段名)
当然也有复合唯一键 创建方法也一样
1.在末尾定义 unique key (字段名1,字段名2...)
2.表创建后用 alter table add 添加复合唯一键
简单来说就是把primary key换成unique 或者unique key
7.外键foreign key (字段名) references 主表(列)
我们现在有两张表,一张记录学生名字+班级id,另一张记录班级id+班级名字。这两张表的信息是相关联的,即1.新增学生+班级id 班级id必须在另一张表中有。2.删除班级id行时,另一张表中不能还存在该班级id的学生。
被引用的是主表(myclass),引用别人的那张表是从表(stu)
为了提供上述关系的约束,我们就需要引入外键。外键必须引用主表的主键或唯一键,必须要保证从表中的一个外键值(如
class_id
)必须能够在主表中唯一匹配到一行记录(如id
)。外键字段本身 不需要唯一:
stu.class_id
在学生表中可以重复(即多个学生在一个班级)。
1.先创建主键表
2.再创建从表
foreign key (字段名) references 主表(列)
3.插入行
外键字段 class_id 的值:必须存在于主表 class(id) 中,否则插入或更新都会失败。
学生表 stu 中还有学生的 class_id = 1,正在引用这个班级。
禁止删除主表中仍被从表引用的行