MySQL约束:外键删除更新行为

先创建两张表能够作为实验数据

1.创建dept表 

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, '总经办');

2.创建emp表

create table emp(
	id int auto_increment comment 'ID' primary key,
	name varchar(50) not null comment '姓名',
	age int comment '年龄',
	job varchar(20) comment '职位',
	salary int comment '薪资',
	entrydate date comment '入职时间',
	managerid int comment '直属领导ID',
	dept_id int comment '部门ID'
) comment '员工表';

INSERT INTO emp(id, name, age, job, salary, entrydate, managerid, dept_id) VALUES
	(1, '金庸', 66, '总裁', 20000, '2000-01-01', null, 5), 
	(2, '张无忌', 20, '项目经理', 12500, '2005-12-05',1, 1), 
	(3, '杨逍', 33, '开发', 8400, '2000-11-03', 2, 1),
	(4, '韦一笑', 48, '开发', 11000, '2002-02-05', 2, 1),
	(5, '常遇春', 43, '开发', 10500, '2004-09-07', 3, 1),
	(6, '小昭', 19, '程序员鼓励师', 6600, '2004-10-12', 2, 1);

1.外键的更新和删除

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update cascade on delete cascade;

 这个命令也就是直接让emp里面的dept_id这一列数据随着dept的改变而改变了,假如说我删除里面的

比如说里面删除1这个研发部,那么emp表里面的dept_id里面有1的都会被删除

就剩下这个5了

2.外键的SET NULL用法

​​​​alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id) on update set null on delete set null;

这个就是我要是把上面的1研发部门修改成6,那么emp里面的数据也会把所有的1变成6

要是把1这个研发部删除了,并不会像更新删除那样,里面的值全部没有,而是会变成NULL

区别就在这里。

附一张黑马程序员的听课截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值