一、什么是约束?
约束对应的英语单词:constraint
在创建表的时候,可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性
约束的作用就是为了保证:表中的数据有效
二、主要的约束种类:
非空约束:not null
唯一性约束: unique
主键约束: primary key (简称PK)
外键约束:foreign key(简称FK)
检查约束:check(注意:mysql不支持,oracle支持)
约束也分为:表级约束和列级约束。
需要给多个字段联合起来添加某一个约束的时候,需要使用表级约束。
三、各种约束的详细介绍:
-
非空约束:not null
非空约束not null约束的字段不能为NULL -
唯一性约束:unique
唯一性约束unique约束的字段不能重复,但是可以为NULL
也可以两个字段联合起来具有唯一性。在mysql当中,如果一个字段同时被not null和unique约束的话,
该字段自动变成主键字段。(注意:oracle中不一样!) -
主键约束(primary key,简称PK)
主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段
主键值:主键字段中的每一个值都叫做:主键值
主键值是每一行记录的唯一标识。
主键值就是每一行记录的身份证号任何一张表都应该有主键,没有主键,则表无效
主键的特征:not null + unique
1个字段做主键,叫做:单一主键
多个字段联合起来添加约束,叫做:复合主键
在实际开发中不建议使用:复合主键。建议使用单一主键。
因为主键值存在的意义就是这行记录的身份证号,只要意义达到即可,单一主键可以做到。
复合主键比较复杂,不建议使用。一张表中,主键约束只能添加1个。(主键只能有1个。)
主键值建议使用:int,bigint,char
不建议使用:varchar来做主键。主键值一般都是数字,一般都是定长的。主键还可以分为:自然主键和业务主键。
自然主键:主键值是一个自然数,和业务没关系。
业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值。
在实际开发中尽量使用业务主键。 -
外键约束(foreign key,简称FK)
外键字段:该字段上添加了外键约束
外键值:外键字段当中的每一个值删除表的顺序:先删子表,再删父表。
创建表的顺序:先创建父表,再创建子表。
删除数据的顺序:先删除子数据,在删除父数据。
插入数据的顺序:先插入父数据,再插入子数据。子表中的外键引用的父表中的某个字段,被引用的这个字段必须是主键吗?
不一定是主键,但至少具有unique约束。同时外键值可以为空。