MySQL之级联删除、级联更新、级联置空
1. 准备测试表
# 专业表major
create table major(id int primary key auto_increment, mmane varchar(20))engine=innodb default charset=utf8; # 学生表mstudent
create table mstudent(id int primary key auto_increment, name varchar(20), major int)engine=innodb default charset=utf8; # 添加外键约束(级联删除)
alter table mstudent add constraint fk_major_stu foreign key(major) references major(id) on delete cascade; # 插入数据
insert into major values(null, 'python'), (null, 'java'), (null, 'go'); insert into mstudent select null, 'A', 1 union select null, 'B', 1 union select null, 'C', 1 union select null, 'D', 2 union select null, 'E', 2 union select null, 'F', 2 union select null, 'G', 3 union select null, 'H', 3 union select null, 'J', 3 union select null, 'K', 3;


1. 级联删除
如果没有在添加外键约束时显式声明级联类型,那么在对主表(外键引用表)相关字段A做DML(UPDATE DELETE INSERT)操作时,从表(有外键约束)中拥有引用自主表字段A的数据行就会发生冲突,造成错误。换句话说,要删除或更新主表数据,就需要先删除或更新从表相关数据
当一个外键的级联类型为DELETE CASCADE时,便支持直接删除主表数据(特别是主表数据被从表引用)

3. 级联更新(UPDATE CASCADE)
ALTER TABLE ADD CONSTRAINT fk_major_stu FOREIGN KEY(major) REFERENCES major(id) ON UPDATE CASCADE;
可以不用先更新从表数据,直接更新主表数据,从表自动更新。
4. 级联置空(SET NULL)
ALTER TABLE ADD CONSTRAINT fk_major_stu FOREIGN KEY(major) REFERENCES major(id) ON SET NULL;
可以不用先删除从表数据,直接删除主表数据,从表自动置空相关数据。
MySQL之级联删除、级联更新、级联置空的更多相关文章
- [原创]MYSQL中利用外键实现级联删除和更新
MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定 ...
- MySQL中利用外键实现级联删除、更新
MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作 ...
- hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)
首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to- ...
- MySQL中外键删除、更新
MySQL支持外键的存储引擎只有InnoDB..在创建外键的时候,可以指定在删除.更新父表时,对子表进行的相应操作,包括RESTRICT.NO ACTION.SET NULL和CASCADE. 其 ...
- MySQL数据库(5)----删除或更新已有行
有时候,会需要删除某些行,或者修改其内容.这是候便需要用到DELETE语句和UPDATE语句. 1. DELETE 语句的基本格式如下所示: DELETE FROM tbl_name WHERE wh ...
- 【Python】Django数据模型、级联删除、级联更新、ER图导出等
在本文中,我们将向读者详细介绍如何在更新和删除父表数据的同时,触发有关子表数据的级联更新和删除操作.您将看到当使用InnoDB表的时候,借助于外键约束就可以轻松搞定这一过程. 一.利用外键约束更新并删 ...
- 自增特性,外键,级联更新与级联删除,表间关系,SELECT用法,GROUP BY
自增特性 自动增长的作用: 问题:为数据表设置主键约束后,每次插入记录时,如果插入的值已经存在,会插入失败. 如何解决:为主键生成自动增长的值. 自动增长的语法: 字段名 数据类型 AUTO_INCR ...
- MySQL外键设置 级联删除
. cascade方式在父表上update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式在父表上update/delete记录时,将子表上匹配记录的列设 ...
- SQLServer表内自关联级联删除
今天处理SQLServer级联删除遇到了很蛋疼的事. SQLServer 不支持表内自关联级联删除,而MySql和Oracle却支持. 貌似原因是SQLServer 会产生循环级联,就不给这样弄.所以 ...
- Oracle如何操作级联删除
级联删除即删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用.在级联删除中,还删除其外键值引用删除的主键值的所有行. 语法: Foreign Key (column[,...n]) refe ...
随机推荐
- Java Runtime.exec()用法
转自:https://www.cnblogs.com/mingforyou/p/3551199.html Java Runtime.exec()的使用 Sun的doc里其实说明还有其他的用法: exe ...
- CentOS 7 - 安装PostgreSQL
一,用yum安装PostgreSQL . 选择安装版本和服务器平台后,执行安装命令,例如我要安装是9.6版本,平台是CentOS 7. https://www.postgresql.org/downl ...
- 用weexplus从0到1写一个app(2)-页面跳转和文章列表及文章详情的编写
说明 结束连续几天的加班,最近的项目终于告一段落,今天抽点时间开始继续写我这篇拖了很久的<用weexplus从0到1写一个app>系列文章.写这篇文章的时候,weexplus的作者已经把w ...
- 使用终端批量下载 B 站视频
需要使用一个叫做 you-get 的命令行程序 可以通过 Homebrew 安装(macOS), 安装命令为 brew install you-get, 其他平台的安装可参考 Github 主页: s ...
- three.js展示三维模型
1.概要 最近学习Three.js,尝试加载一些3d max导出的obj.stl模型,在展示模型的时候遇到了一些问题,模型的尺寸.位置和旋转角度每次都靠手工调整,非常的不方便,就想着写一个方法来随心所 ...
- Windows 上搭建Apache FtpServer
阅读目录 第一步:下载Apache FTPServer 第二步:解压Apache FTPServer 第三步:修改配置文件 第四步:启动FTPServer 第五步:访问FTP 第六步:FTPServe ...
- openstack各服务端口使用情况
端口占用情况 端口情况可以使用ss -tanp命令进行查看 监听的所有端口ss -tanp | grep LISTEN 基础服务 22 --SSH 3306 --MariaDB(MySQL) 2701 ...
- 题解 洛谷P2503 【[HAOI2006]均分数据】
看了眼题目和数据范围\(n \leq 20,k \leq 6\)自然想到了\(dfs\)分组求解,主要是被这道题坑自闭过. 然而硬来\(dfs\)肯定会被蜜汁\(T\)掉,因为暴力\(n\)个数所在集 ...
- 用python查看网站被百度所有收录网址与标题进行SEO分析
SEO要是和python数据分析联合在一起,可谓是很好的方法,没事的时候尝试写的分析网站被百度收录的网址和标题. 首先得引入两个py模块,分别是:Beautiful Souprequests ...
- POJ2282 The Counting Problem
题意 Language:DefaultEspañol The Counting Problem Time Limit: 3000MS Memory Limit: 65536K Total Submis ...