约束(constraint)
实际就是表中数据的限制条件
种类
非空约束(not null)
not null
唯一性约束(unique)
unique
与主键约束的区别
**相同点**
都要求值是唯一的
**不同点**
主键约束有且只能由一个唯一约束,但是一个表剋允许有多个唯一性约束
主键列是不允许出现null值的,但是unique约束的值可以接收null值
unique(列名,列名) 连级唯一约束
**语法 **
constraint 表名 给约束起名称 unique 约束列名
主键约束(primary key)
单一主键
符合主键
检查约束(check)
是用来检查数据表中字段值有效性的一种手段,可以通过create table 或alter table语句实现。
选取设置检查约束的字段
check(表达式)
指的是sql表达式,用于指定需要检查的限定条件
若将check越苏子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的check约束,该约束可以同时对表中多个列设置限定条件。
在创建表时设置检查约束
check(<检查约束>)
check(salary>0 and salary<100)
在修改表时检查约束
alter table tb_emp add constraint<检查约束名> check(<检查约束>)
add constraint check_id check(id>0)
删除检查约束
alter table <数据库表> drop cibstraint<检查约束名>;
drop constaint check_id;
外键约束(foreign key)
是表的一个特殊字段,经常与主键约束一起使用相关联字段中所在的表就是主表,外键所在的表就是从表。
主表里面有一列为主键id的时主表,另外一个是子表
定义外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,活着时当前正砸创建的表。如果时后一种情况,则主表与从表是同一个表,这种结构为自参照完整性。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。
- 在主表的表名后面指定列名或列名的组合。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中的数据类型必须和主表主键中对应的数据类型相同。
在创建表时设置外键约束
[constraint <外键名>] foreign key 字段名[,字段名2]
references <主表名> 主键列1 [主键列2,...]
constraint fk_emp_dept1 foreign key(列名) rederences 表名(列名)
注意:从表的外键关联的时主表的主键,且主键和外键的数据类型必须一致。
在修改表时添加外键约束
添加外键约束的前提是: 从表中外键中的数据必须与主表中主键列的数据一致或者是没有数据。
alter table <数据表名> add constraint <外键名>
foreign key (<列名>) references <主表名>(<列名>)
alter table tv_emp2 add constraint fk_tb_dept1
foreign key(deptid) references tb_dept1(id);
注意:在为已经创建好的数据表添加外键约束时,要确保添加外键约束的列的值全部来源于主键列,并且外键不能为空。
删除外键约束
alter table <表名> drop foreign key<外键约束名>
alter table tb_emp2 drop foreign key fk_tb_dept1;
查看表中的约束
show create table <数据库名>;
check(salary>0) foreign key(deptid) references tb_dept1(id);