1. 表的约束:
-
通过约束,来规范插入表中的数据时符合预期的。如果插入的数据不符合规范,会插入失败,所以说约束相当于倒逼程序员插入正确的数据。
-
反过来可以得出:只要被插入到表中的数据,一定是符合规范的,以此来确保数据的完整性。
2. 空属性(null):
-
有两个值:null和not null。默认字段属性为空(yes),由于null不能参与运算,所以尽量保证字段的属性不为空。
-
字段属性为null,插入一条数据但是不向该字段插入值,那该字段的值会被默认设置为null。
-
全插入时,即是字段可以为空,也要插入一个null用来标识。
3. 默认值(default):
-
相当于缺省值,想要为某个字段设置缺省值,在创建字段时,使用default+缺省值即可。
-
在插入数据时,如果用户传入数据,就使用用户的,否则就使用默认值。
-
如果一个字段不设置not null,且不自己设置default值的话,数据库会自动优化该字段,为其加上default null属性,这就是我们在不向not null字段插入数据,但是使用select查看时,可以看到值为null的原因。
4. 列描述(comment):
-
相当于对字段的描述信息,相当于注释。
-
查看comment,配合show create table查看。
5. zerofill:
-
一个用前导0填充宽度的约束,在mysql8之后就被废弃了,zerofill属性只在查看时格式化,不会影响实际存储,实际存储时依然存储的是一个整数。
-
只能用于数值类型,不能用于其它类型。
-
设置zerofill属性的字段,会被mysql自动添加unsigned属性修饰。
-
int类型后面括号中的数字代表显示宽度,括号中的值并不影响数据范围和存储大小,它只有一个作用就是配合zerofill来控制显示时的宽度。
6. 主键(primary key):
-
一张表只能有一个主键,主键对应的字段的每个元素都是唯一的,主要作用是高效索引。
-
且主键不能为空,如果在创建字段时没有指定主键字段为非空,那么数据库会自动为其加上非空属性。
-
主键对应的字段的类型通常是整数类型。
alter table xxx drop primary key; // 删除主键:基于表中只有一个主键,可以之间通过表名删掉该表的主键
alter table xxx add primary key(字段1); //建表后添加主键:将xxx表中的字段1设置为主键
-
一张表只能有一个主键,但是不意味着主键只能在一列上,主键可以在多列上,在多列上的主键被称为复合主键。
primary key(字段1,字段2);
// 将字段1和字段2设置为复合主键,单独的字段1或者字段2可以重复,但是两者的组合不能重复,
7. 自增长(auto_increment):
-
数据库的一种自动编号机制,主要作用于主键,在插入数据时会自动生成一个唯一、递增的值。
-
默认从1开始,默认步长为1。删除数据后,不会复用已删除的ID。新插入的数据的ID从最大ID向后加1。
-
仅适用于整数类型,推荐使用bigint。想要加自增长约束的字段,key值一栏必须要有值,一张表最多有一个自增长。
-
使用show create table可以查看当前自增长ID。
create table xxx( n1 int primary key auto_increment )auto_increment=n;
//可以在表外设置自增长的起始ID。
alter table xxx auto_increment=n; // 建表之后修改自增长ID
8. 唯一键(unique):
-
用于确保值不重复的约束,类似于主键,但是可以为空(null)。
-
一张表中可以有若干个唯一键,但是只能有一个主键。
9. 外键:
-
用于建立表与表之间关系的一种约束,外键设置在从表上,用于关联主表的主键或者唯一键。
foreign key (从表字段) references xxx(主表字段) // 建表是添加外键。
alter table 从表 ADD constraint fk_dept foreign key (dept_id) references departments(dept_id);
-
从表插入数据时,根据外键约束,不能插入一个主表中不存在的值。比如从表的id字段通过外键关联主表的id字段,主表的id只有1和2,那么从表插入数据时,就不能在从表的id字段插入除1和2以外的值。
-
根据外键约束,如果从表有数据关联到主表,那么主表的对应数据不能直接删除,要先删除从表的关联数据后才能删除主表的数据。
-
可以为外键取名也可以不取名,如果不取名,编译器会自动生成一个名称。