MySQL数据库基础学习(二十五)
2023-02-19 12:23:47 时间
4.3.2 语法
1). 添加外键
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名)
REFERENCES 主表 (主表列名) ;
案例:
为emp表的dept_id字段添加外键约束,关联dept表的主键id。
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id);
添加了外键约束之后,我们再到dept表(父表)删除id为1的记录,然后看一下会发生什么现象。此时将会报错,不能删除或更新父表记录,因为存在外键约束。
2). 删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
案例:
删除emp表的外键fk_emp_dept_id。
alter table emp drop foreign key fk_emp_dept_id;
4.3.3 删除/更新行为
添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:
具体语法为:
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES
主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
演示如下:
由于NO ACTION 是默认行为,我们前面语法演示的时候,已经测试过了,就不再演示了,这里我们再演示其他的两种行为:CASCADE、SET NULL。
1). CASCADE
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update cascade on delete cascade ;
A. 修改父表id为1的记录,将id修改为6
我们发现,原来在子表中dept_id值为1的记录,现在也变为6了,这就是cascade级联的效果。
B. 删除父表id为6的记录
我们发现,父表的数据删除成功了,但是子表中关联的记录也被级联删除了。
2). SET NULL
在进行测试之前,我们先需要删除上面建立的外键 fk_emp_dept_id。然后再通过数据脚本,将emp、dept表的数据恢复了。
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update set null on delete set null ;
相关文章
- LyScript 计算片段Hash并写出Excel
- 驱动开发:内核LDE64引擎计算汇编长度
- 参加面试前,一定要知道的互联网黑话
- 官宣!流计算开发管理框架 StreamPark 成功进入 Apache 孵化器
- Galaxy Release (v 22.05),新历史面板发布
- 页面加载代码
- Shell:变量数值计算(上)
- Shell:变量数值计算(下)
- ES6躬行记(12)——数组
- ES6躬行记(11)——对象
- ES6躬行记(10)——正则表达式
- ES6躬行记(9)——字符串
- ES6躬行记(8)——数字
- ES6躬行记(7)——代码模块化
- ES6躬行记(6)——Symbol
- ES6躬行记(5)——对象字面量的扩展
- ES6躬行记(4)——模板字面量
- ES6躬行记(3)——解构
- ES6躬行记(2)——扩展运算符和剩余参数
- ES6躬行记(1)——let和const