概述
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据
目的:保证数据库中数据的正确、有效性和完整性
分类:
非空约束:限制改该字段的数据不能为null 关键字:not null
唯一约束:保证该字段的所有数据都是唯一的、不重复的 关键字:unique
主键约束:主键是一行数据的唯一标识,要求非空且唯一 关键字:primary key
默认约束:保存数据时,如果未指定该字段的值,则采用默认值 关键字:default
检查约束:保证字段值满足某一条件 关键字:check
外键约束:用来让两张表的数据之间建立联系,保证数据的一致性和完整性 关键字:foreign key
演示
create table employee(
#唯一标识,主键,自动增长为auto_increment
id int primary key auto_increment comment 'ID',
#不为空且唯一
name varchar(10) not null unique comment '姓名',
#大于零小于120
age int check ( age>0&&age<120 )comment '年龄',
#默认约束
status char(1) default '1' comment '状态',
gender varchar(1) comment '性别'
)comment '员工表';
drop table employee;
#插入数据
insert into employee( name, age, status, gender) VALUES('tom',10,'1','男'),
('jom',19,'1','男'),
('jerry',30,'1','女');
唯一约束:
insert into employee(name, age, gender) VALUES ('tom',10,'1','男');
检查约束:
insert into employee(name, age, gender) VALUES ('tem',130,'1','男');//年龄超过
外键约束
用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性
添加外键
#创建表时添加
create table 表名(
字段名 数据类型,
。。。
[constrain][外键名称] foreign key(外键字段名)references 主表(主表列名)
);
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);
删除外键:
alter table emp drop foreign key 外键名;
create table dept(
id int auto_increment comment 'ID' primary key ,
name varchar(50) not null comment '部门名称'
)comment '部门表';
insert into dept(id, name) VALUES (1,'研发部'),(2,'市场部'),(3,'财务部'),(4,'销售部'),(5,'总经办');
create table employee(
#唯一标识,主键,自动增长为auto_increment
id int primary key auto_increment comment 'ID',
#不为空且唯一
name varchar(10) not null unique comment '姓名',
#大于零小于120
age int check ( age>0&&age<120 )comment '年龄',
job varchar(20) comment '职务',
salary int comment '薪资',
entrydate date comment '入职时间',
dept_id int comment '部门id'
)comment '员工表';
insert into employee(id,name,age,job,salary,entrydate,dept_id)values (1,'tom',22,'开发',3000,'2018-11-1',1),
(2,'jerry',34,'经理',10000,'2011-2-11',5),
(3,'xiaoxiao',18,'程序员鼓励师',8000,'2020-1-2',4);
#添加外键
alter table employee add constraint fk_employee_dept_id foreign key (dept_id) references dept(id);
#删除外键
alter table employee drop foreign key fk_employee_dept_id;
此时不能删除dept表中的数据
删除/更新行为
no action 当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新(与restrict 一致)
restrict 当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除更新(与no action一致)
cascade 当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有也允许删除更新外键在子表中的记录
set null 当在父表中删除更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(要求该外键允许取null)
set default 父表将外键列设置成一个默认的值(Innodb不支持)
#添加外键并加上删除更新行为
#语法
#alter table 表名 addconstrant 外键名称 foreign key(外键字段) references 主表名(主表字段名) on update cascade on delete cascade;
alter table employee add constraint fk_employee_dept_id foreign key (dept_id) references dept(id) on UPDATE cascade on delete cascade ;