MySQL之级联删除、级联更新、级联置空

摘要:
1.准备测试表#majorcreatetablemajor

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;

MySQL之级联删除、级联更新、级联置空第1张

MySQL之级联删除、级联更新、级联置空第2张

1. 级联删除

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

当一个外键的级联类型为DELETE CASCADE时,便支持直接删除主表数据(特别是主表数据被从表引用)

MySQL之级联删除、级联更新、级联置空第3张

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之级联删除、级联更新、级联置空》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇树莓派4b安装Ubuntu20.04【Mongodb】用户和认证 权限总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析

(3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 【1】变量初始化部分  【2】函数声明部分  【3】具体执行部分 #!/bin/sh #【第1部分,变量初始化部分begin】 #【1.1】指定Mysql安装程序及数据目录的路径,默认是/usr/local/mysql,默认是空的 ba...

MySQL 同时 delete 多张表的数据

三张表 article ,tag,article_tag article 文章表 create tablearticle( article_id int primary keyauto_increment, article_title varchar(100) ); insert into article(article_title) va...

微服务部署(一)架构简介

简介金财项目是微服务构架,每个功能模块都是一个单独部署的服务,现有20个服务:AUTH、CUSTOMER、EHALL、CONFIG、EUREKA、GATEWAY、GATEWAY-UI、GENERATOR、JCCOLLEGE、NOTIFY、ORDER、PAY、PRODUCT、REPORT、SECURITY、SYSTEM、STORE、TASK、WECHAT、W...

MySQL8.0数据库连接驱动问题

在新电脑上安装了MySQL8.0,打开原来的一个项目去连接时,报如下错误 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Caused by: java.lang.Nul...

docker-compose .netcoreapi、mysql、nginx多容器部署

前言: ​ 基于上一篇.NetCoreApi容器与MySql容器互联,此处利用docker-compose来快速配置启动mysql容器与.NetCoreApi容器。 注意: ​ docker-compose.yml的编写缩进不要用tab,要直接用空格(坑了我很久。。。) 一、编写docker-compose.yml文件 version: "3" servi...

Mysql源码学习——打造专属语法

语法分析——YACC 接触过SQL语句的人都会看过这家或者那家的SQL手册,其语法标准应该是从SQL92开始吧,在看SQL92标准的时候,你会发现里面定义的都是一些巴科斯范式(BNF),就是一种语法定义的标准。不管是牛X哄哄的ORACLE,还是不幸被其收购的Mysql,都会遵循里面的标准语法,当然一些扩展的语法除外,比如今天我们就会扩展一个简单的语法^...