十九、MySQL外键删除更新行为如何实现?

1、行为约束

(1)基础概念:        

要学习外键约束,就要先了解外键约束。

        比如说,现在这里有两张表,其中一张存储着用户的信息(子表),另外一张存储着用户所属的部门(父表) ,但现在由于误操作,不小心将父表中某一条信息删除,那么就有可能导致子表中某些用户的部门信息变成无数据源,导致用户信息不完整。现在,又向子表中随意添加一组数据,改组数据可能没有对应的部门数据,这样的信息是不完整的!

        因而,这样就有必要设置外键约束。

相对于基础建立外键的语句,只需要在其后加上"on update 行为"和"on delete 行为"即可

alter table 子表名 add constraint 外键名称 foreign key (子表字段名) references 父表名(父表字段名) on update 行为 on delete 行为;

(2)约束语法说明:

当用户对父表进行修改时,设置不同的外键约束,子表会产生不同的变化。

(3)no action和restrict:

当父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有对应外键则不允许删除/更新。

当父表中删除/更新对应记录时,首先检查该记录是否有对应外键,
如果有对应外键则不允许删除/更新,
行为:no action 或 restrict

(4)cascade:

 当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,如果有,则删除/更新外键在子表中的记录:

当在父表中删除/更新对应记录时,首先检查记录是否有对应外键,
如果有,则删除/更新外键在子表中的记录:
行为:cascade

(5)set null: 

当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有,则设置子表中该外键值为null(注意,该处要求外键可取null)

当在父表中删除对应记录时,首先检查该记录是否有对应外键,
如果有,则设置子表中该外键值为null(注意,该处要求外键可取null)
行为:set null

(6)set default:

 父表有变更时,子表将外键设置成一个默认的值,(注意,MySQL的默认数据存储引擎Innodb不支持)

父表有变更时,子表将外键设置成一个默认的值
(注意,MySQL的默认数据存储引擎Innodb不支持)
行为:set default

2、 操作:

(1)语法:

相对于基础建立外键的语句,只需要在其后加上"on update 行为"和"on delete 行为"即可

alter table 子表名 add constraint 外键名称 foreign key (子表字段名) references 父表名(父表字段名) on update 行为 on delete 行为;

(2)初始化表格:

(3) 验证no action和restrict:

在初始化表格之后,运行如下语句:

alter table emp add constraint fk_number_empforeign key (type) references number(id)on update no action on delete restrict ;

进入父表,对某行数据执行删除操作:会报错!

(4) 验证cascade:

alter table emp add constraint fk_number_empforeign key (type) references number(id)on update cascade on delete cascade ;

在执行该语句之后,进入父表,删除第一行数据,再进入子表,可以看到外键在子表中的记录被删除:

(5) 验证set null:

alter table emp add constraint fk_number_empforeign key (type) references number(id)on update set null on delete set null ;

进入父表,删除第一行数据,再进入子表,可以看到外键在子表中的记录被设置为null:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106312.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法日志】单调栈: 单调栈简介及其应用

代码随想录刷题60Day 目录 单调栈简介 单调栈的应用 下次更高温 下一个更大元素1 下一个更大元素2 接雨水 柱状图中最大矩形 单调栈简介 单调栈(Monotonic Stack)是一种特殊的栈数据结构,它满足元素的单调性,这种单调性需…

最新IDE流行度最新排名(每月更新)

2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧,Top IDE索引可以帮助您决定在软件开发项目中使用哪个IDE …

为IT服务台构建自定义Zia操作

Zia是manageengine的商业人工智能助手,是ServiceDesk Plus Cloud的虚拟会话支持代理。使用Zia,您可以优化帮助台管理,还可以缩小最终用户与其帮助台之间的差距,Zia通过执行预配置的操作来帮助用户完成他们的服务台任务。 例如&…

数据结构:线性表(队列实现)

1. 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表,队列具有先进先出(FIFO)的特性. 进行插入操作的一端称为队尾;进行删除操作的一端叫做队头 队列应用于 解决公平性排队(抽号机)广度优先遍历(BFS) 2. 队列的定义 和栈一样,队列也可…

反序列化漏洞及漏洞复现

文章目录 渗透测试漏洞原理不安全的反序列化1. 序列化与反序列化1.1 引例1.2 序列化实例1.2.1 定义一个类1.2.2 创建对象1.2.3 反序列化1.2.4 对象注入 2. 漏洞何在2.1 漏洞触发 3. 反序列化漏洞攻防3.1 PHP反序列化实例3.1.1 漏洞利用脚本3.1.2 漏洞利用3.1.3 获取GetShell 3.…

Python网页请求超时如何解决

在进行网络爬虫项目时,我们经常需要发送大量的请求来获取所需的数据。然而,由于网络环境的不稳定性,请求可能会因为超时而失败。请求超时可能导致数据获取不完整,影响爬虫的效率和准确性。此外,频繁的请求超时可能会被…

KNN算法回归问题介绍和实现

上篇博客中,介绍了使用KNN算法实现分类问题,本篇文章介绍使用KNN算法实现回归问题。介绍思路是先使用sklearn包提供的方法实现一个KNN算法的回归问题。再自定义实现一个KNN算法的回归问题工具类。 一、sklearn包使用KNN算法 1. 准备数据 使用sklearn包…

单片机之硬件记录

一、概念 VBAT 当使用电池或其他电源连接到VBAT脚上时,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。如果应用中没有使用外部电池,VBAT引脚应接到VDD引脚上。 VCC:Ccircuit 表示电路的意思,即接入电路的电压&#x…

java设计模式,简单工厂和抽象工厂有什么区别?

java设计模式,简单工厂和抽象工厂有什么区别? 简单工厂模式: 这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。 它由三种角色组成&#xf…

pip和conda的环境管理,二者到底应该如何使用

关于pip与conda是否能混用的问题,Anaconda官方早就给出了回答 先说结论,如果conda和pip在相同环境下掺杂使用,尤其是频繁使用这两个工具进行包的安装,可能会导致环境状态混乱 就像其他包管理器一样,大部分这些问题均…

Eviews用向量自回归模型VAR实证分析公路交通通车里程与经济发展GDP协整关系时间序列数据和脉冲响应可视化...

全文下载链接:http://tecdat.cn/?p27784 河源市是国务院1988年1月7日批准设立的地级市,为了深入研究河源市公路交通与经济发展的关系,本文选取了1988-2014年河源市建市以来24年的地区生产总值(GDP)和公路通…

Linux dup dup2函数

/*#include <unistd.h>int dup2(int oldfd, int newfd);作用&#xff1a;重定向文件描述符oldfd 指向 a.txt, newfd 指向b.txt,调用函数之后&#xff0c;newfd和b.txt close&#xff0c;newfd指向a.txtoldfd必须是一个有效的文件描述符 */ #include <unistd.h> #i…