约束
定义: 强加在表上的规则或条件,可以确保表中的数据满足业务规则,保证数据完整性。
5种类型
- 主键约束(primary key):用于唯一地标识表中的每一行,主键列不能重复且不能为空。
- 外键约束(foreign key):用于定义主表和从表之间的约束关系,
外键约束定义在从表
(被约束的列称为外键),主表则必须具有主键约束和唯一约束。外键约束要求外键列数据必须在主表的主键列存在或者为空。删除主表的记录时,同时删除从表的相关记录,或者约束列设置为空,或者限制删除主表被引用的记录。
- 唯一约束(unique):用于保证列上的数据不重复,在一个数据表中可以定义多个唯一约束。
- 检查约束(check):用于为列上的数据增加限制条件,在一个列上可以定义多个检查约束。
- 非空约束(not null):用于保证列上的数据不能为空值(null)
定义约束
约束可以在create table_name时创建,也可以通过alter table_name时创建。
//在创建表时创建约束
create table tb_s(
sno char(6),
sname char(10),
sex char(1) check(sex in ('M','F')),
birthday date,
mail char(60),
classNo char(6)
)
//通过修改表的形式创建约束
alter table phone add constraint CK_tbs_mail check(mail like %@%);
添加约束
//格式
alter table table_name add constraint constraint_name constraint_type(content);
//为sno列添加主键约束
alter table tb_s add constraint PK_tbs_sno primary key(sno);
//为classNo列添加参照约束,参照tb_sc表中的classNo
alter table tb_s add constraint FK_tbs_classNo foreign key (classNo) references tb_sc(classNo);
//为mail列添加唯一约束
alter table tb_s mail add constraint Unique_tbs_mail unique(mail);
//为mail添加非空约束
alter table tb_s modify mail not null;
//为mail添加检查约束
alter table phone add constraint CK_tbs_mail check(mail like %@%);
删除约束
alter table table_name drop constraint constraint_name;
关于外键约束
表与表刚创建的时候没有联系,所以需要后期添加外键。
alter table 主表名 add constraint 外键约束名称 foreign key (主表字段) references 从表名(从表字段);
例:
alter table tb_s add constraint FK_tbs_classNo foreign key (classNo) references tb_sc(classNo);
解释:给表tb_s的classNo字段添加了一个外键约束,参照为tb_sc表的classNo字段。
即:当tb_s.classNo插入一个tb_sc.classNo中没有的数据时,会报“违反完整约束条件”