约束
约束:在数据表上强制执行的一些数据检验规则,当执行DML操作时,数据必须符合这些规则,若果不符合则无法执行。
约束条件可以保证表中数据的完整性,保证数据间的商业逻辑。
约束类型:
非空约束(NOT NULL),简称NN
唯一性约束(Unique),简称UK
主键约束(Primary Key),简称PK
外键约束(Foreign Key),简称FK
检查性约束(Check),简称CK
非空约束:用于确保字段值不为空,关键字为NOT NULL
可用ALTER操作取消非空约束或增加非空约束
唯一约束:用于保证字段或字段的组合不出现重复值,允许为空,关键字为UNIQUE
添加唯一性约束的格式为:
ALTER TABLE table
ADD CONSTRAINT table_column_uk UNIQUE(column)
其中CONSTRAINT是表级约束,其后的字段跟表名_列名_约束简写+约束全名(约束的列)
主键约束:表示在表中唯一确定的一行数据,非空且唯一,关键字为PRIMARY KEY
一个表只允许建一个主键
添加主键约束的格式为:
ALTER TABLE table
ADD CONSTRAINT table_column_uk PRIMARY KEY(column)
主键的选取原则:
(1)主键应是对系统无意义的数据
(2)主键永远不要更新,让主键除了唯一标识一行之外,再无其他用途
(3)主键不应包含动态变化的数据,如时间戳
(4)主键应是自动生成的,不要人为干预,以免使它带有除了唯一标识一行以外的意义
(5)主键应尽量建立在单列上
外键约束:定义在来年哥哥表的字段或一个表的两个字段上,用于保证相关的两个字段的关系,关键字为FOREIGN KEY。
添加外键约束的格式为:
ALTER TABLE table
ADD CONSTRAINY table_column_fk
FOREIGN KEY (column) REFERENCES table1(column1)
其中table是从表表名,column是从表的列名,table1是主表表名,cloumn1是主表的列名
外键约束包括两个方面的数据约束:
(1)从表上定义的外键的列值,必须从主表被参照的列值中选取或者为NULL
(2)当主表参照列的值被从表参照时,主表的该行记录不允许被删除
注意事项:
(1)如果在一个频繁DML操作的表上建立外键,每次DML操作,都将导致数据库自动对外键所关联的对应表做检查,产生开销,如果已在程序中控制逻辑,这些判断将增加额外负担,可以省去。
(2)外键确定了主从表的先后生成关系,有时影响业务逻辑。
(3)保证数据完整性,可由程序或触发器控制。
(4)简化开发,维护数据时,不用考虑外键约束。
(5)大量数量DML操作时不需要考虑外键耗费时间
检查约束:用来强制在每个字段的每一个值都要满足CHECK中定义的条件。
添加检查约束的格式为:
ALTER TABLE table
ADD CONSTRAINT table_column_ck
CHECK(检查条件)