真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合
法性,从业务逻辑角度保证数据的正确性。
在字段类型后加null或not null修饰;
两个值:null (默认的)和not null(不为空);
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。
在字段类型后加default修饰;
某一种数据会经常性的出现某个具体的值,可以在一开始就指定好, 在需要真实数据的时候,用户可以选择性的使用默认值;
设置列属性默认值后,插入数据该字段不赋值,就是用默认值:
在字段类型后加comment修饰;
列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。
通过desc无法查看注释信息,可以通过create table查看:
在字段类型后加zerofill修饰;
数字类型后面的长度就是zerofill属性,相当于一个字段的默认宽度,表示如果插入数据的宽度小于默认宽度,就会自动填充0;
上图表中的三个字段:num1为默认int类型,num2的为设置了zerofill属性的int(5)类型,num3为设置了zerofill的默认int类型,向其中插入相同的数据:
可以看出num1不受zerofill的影响,num2和num3都进行了自动填充;
在字段类型后加primary key修饰;
主键:primary key用来唯一的约束该字段里面的数据, 不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型;
alter table 表名 add primary key(字段列表);
alter table 表名 drop primary key;
在字段类型后加auto_ increment修饰;
auto_ increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
自增长的特点:
索引:
设置id为自增长的主键:
如果显式向自增长字段中添加数据,自增长值就会更新为该字段最大的值+1;
也可以在建表时指定自增长的初始值:
在字段类型后加unique修饰;
一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键,唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空, 而且可以多个为空,空字段不做唯一性比较。
关于唯一键和主键的区别:
将序号设置为主键,学号和邮箱地址设置为唯一键:
插入数据:
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束;当定义外键后,要求外键列数据必须在主表的主键列存在或为null;
语法:
foreign key (字段名) references 主表(列)
主表字段和从表字段之间存在约束关系:
定义一个主表:
定义一个从表,其中从表的class_id定义为主表中id的外键:
向表中插入数据:
如上图所示,stu_tb中的class_id是class_tb表中id的外键,因此在向stu_tb插入数据时,class_id的值只能是class_tb表中id已经存在的值,这就是外键的约束关系;