一。定义、分类
1.定义:建表时,为表中字段加上一些约束,保证表中数据的完整性、有效性。
∴约束的作用是:保证表中的数据有效。
2.分类:
非空约束:not null(列级)
唯一性约束:unique(列级、表级)
主键约束:primary key、auto_increment(自动维护主键)
外键约束:foreign key
检查约束:check(MySQL不支持,Oracle支持)
二。非空约束
1.定义:not null。约束的字段不能为null。只有列级约束,没有表级约束。
2.举例:
3.unique和not null联合:
三。唯一性约束
1.定义:unique。被约束的字段不能重复,但可以为null。有列级约束、表级约束。
2.举例:
3.列级约束:单字段
4.表级约束:多字段
①举例:
②:使用表级约束的条件:
A:为多个字段联合起来添加某一约束时,要用表级约束。此时称为联合唯一性约束。
③:联合唯一性约束:
2-多个字段联合在一起,要想具有唯一性,需要使用联合唯一性约束。
举例:
四。主键约束
1.主键的分类:
①单一主键、复合主键; ②自然主键、业务主键。
2.主键的作用:
主键值:每一行记录的唯一标识。
使用注意:主键不重复。表没有主键,则表无效。
3.主键的特征:
not null + unique(主键值不能是NULL,同时也不能重复!)
4.添加单一主键:
5.使用表级约束添加主键:
6.使用表级约束添加复合主键:
7.一个表中只能有 1 个主键约束。
8.主键值建议使用:int、bigint、char等类型。不建议使用:varchar类型。主键值一般都是数字、定长的。
五。外键约束
1.业务背景:
设计数据库表,来描述“班级和学生”的信息。
为保证学生表内的【no】数据,在填写时,符合班级表内的【classno】数据,避免出现填写为“102”的现象。需要给cno字段添加外键约束。
此时:
cno字段就是外键字段。
cno字段中的每一个值都是外键值。
创建表的顺序:父→子
删除表的顺序:子→父
插入数据的顺序:父→子
删除数据的顺序:子→父
Q1:子表中外键引用父表中的某个字段,被引用的这个字段必须是主键吗?
A1:不一定是主键,但是至少有unique约束。
Q2:外键可以为null吗?
A2:可以
六。自动维护主键 auto_increment
1.auto_increment:自增,从1开始,以1自增。不写主键,系统会自动填充主键。
七。自然主键、业务主键
1.自然主键:主键值是一个自然数,和业务没关系。
2.业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值。这就是业务主键。
3.实际开发中,使用自然主键较多:
∵主键只要做到不重复就行,不需要有意义。并且主键一旦和业务挂钩,当业务发生变动时,可能会影响到主键值,所以业务主键不建议使用。