搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
正经夜光杯
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
在Jetson Nano上学习ROS的记录(版本Ubuntu18.04,课程来源赵虚左老师的《ROS理论与实践》)第十一章-第一节 机器人系统仿真(URDF相关)_jetson nano启动rviz
2
基于springboot的邮件过滤系统的设计与实现_springboot email根据时间过滤邮件
3
ZooKeeper部署全攻略——TLS/SSL安全认证
4
谷歌创始人退位!印度籍 CEO 这是要“接管”美国科技圈?
5
Fastjson反序列化_fastjson反序列化什么时候去解析域名dns
6
两个C++编译错误及解决办法--does not name a type和field `XX' has incomplete type_i does not name a type
7
android studio2024最新详解(完全小白)安装-运行第一个程序_android studio24
8
Linux开源系统对比Windows闭源系统的优势解析
9
时域方法---自回归模型(Autoregressive (AR) Model)介绍,创新点(非线性时间序列分析代码提供),另有两个创新点在文章中总结标题中_autoregressive models
10
毕业工作5年被裁,Java开发了解这些自然无惧面试_java 5年 知乎
当前位置:
article
> 正文
如何防止插入删除表造成的数据库死锁 _循环删表产生死锁
作者:正经夜光杯 | 2024-08-12 16:43:53
赞
踩
循环删表产生死锁
如何防止插入删除表造成的数据库死锁
在数据库中经常会遇到这样的情况:一个主表A,一个子表B,B表中包含有A表的主键作为外键。当要插入数据的时候,我们会先插入A表,然后获得A表的Identity,再插入B表。如果要进行删除操作,那么就先删除子表B,然后再删除主表A。在程序设计中,对两个表的操作是在一个事务之中完成的。
当系统使用频繁就会出现插入操作和删除操作同时进行的情况。这个时候插入事务会先将主表A放置独占锁,然后去访问子表B,而同时删除事务会对子表B放置独占锁,然后去访问主表A。插入事务会一直独占着A表,等待访问B表,删除事务也一直独占着B表等待访问A表,于是两个事务相互独占一个表,等待对方释放资源,这样就造成了死锁。
遇到这种情况我听说了三种做法:
1 取消AB两个表之间的外键关系,这样就可以在删除数据的时候就可以先删除主表A,然后删除子表B,让对这两个表操作的事务访问顺序一致。
2 删除A表数据之前,先使用一个事务将B表中相关外键指向另外A表中的另外一个数据(比如在A表中专门建一行数据,主键设置为0,永远不会对这行数据执行删除操作),这样就消除了要被删除的数据在AB两个表中的关系。然后就可以使用删除事务,先删除A表中的数据,再删除B表中的数据,以达到和插入事务表访问一致,避免死锁。
3 在外键关系中,将“删除规则”设置为“层叠”,这样删除事务只需要直接去删除主表A,而不需要对子表B进行操作。因为删除规则设置为层叠以后,删除主表中的数据,子表中所有外键关联的数据也同时删除了。
个人认为感觉第二条解决办法是最好的.其他的都是不可取的,也正是因为外键用起来麻烦,很多人干脆就不用外键,直接在代码中控制.通过臃肿的代码来提高程序的灵活性.实在是不可取.级联就要根据具体的需求了,现在往往都是要逻辑删除,然后留个数据以备将来分析.所以不是很明确的时候就不要级联了
(摘自xuejinyoulan,网址:http://database.csdn.net/page/a53225b7-28e8-44d8-8db7-9a7d55ab2270)
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/正经夜光杯/article/detail/970650
推荐阅读
article
各大
平台
电商
接口
_流
开放
平台
(
logistics
open
platform
,
lop
)
接口
...
各大电商
平台
关键词搜索_流
开放
平台
(
logistics
open
platform
,
lop
)
接口
流
开放
平台
(logist...
赞
踩
article
什么
是
URL
过滤
?
是
如何保障浏览体验
的
?_
url
过滤
...
互联网
是
一个无边无际
的
空间,几乎包含了你能想象到
的
一切。不幸
的
是
,这意味着也存在着从不合适到非常危险
的
网站。这就
是
UR...
赞
踩
article
Flink
使用指南
:
状态
计算
完全搞懂了,你就是大佬!_
flink
状态
计算
...
系列文章目录
Flink
使用指南
: 面试必问内存管理模型,进大厂一定要知道!
Flink
使用指南
: Kafka流表关联HBa...
赞
踩
article
docker
window
设置开机不自启...
Windows,Docker相关视频讲解:Windows Server 2008备份关键卷如何将两个Web服务器加入域并...
赞
踩
article
HarmonyOS4.0
ArkTS
基本语法...
当我们创建一个新的page时,IDE会给我们生成一个HelloWorld的模板新建page开启预览器。HarmonyOS...
赞
踩
article
Navicat
:解决
导入
csv
文件
中文
乱码
的问题_
navicat
导入
csv
文件
乱码
...
本文给出了使用
Navicat
向表中
导入
csv
文件
中文
乱码
的解决方案_
navicat
导入
csv
文件
乱码
navicat
导入
c...
赞
踩
article
“
35
岁
”
软件测试
工程师
就
会
被淘汰吗?_
软件测试
35
岁
会
淘汰吗...
看到很多人在焦虑
“
35
”
岁
IT职业瓶颈的问题,尤其很多转行
软件测试
的群体,因为本身是IT零基础的情况,对
软件测试
的
“
35
...
赞
踩
article
MySQL
进阶篇(四)
视图
/
存储
过程
/
触发器
_
mysql
存储
过程
和
触发器
讲解...
一、
视图
| 二、
存储
过程
| 三、
存储
函数 | 四、
触发器
| _
mysql
存储
过程
和
触发器
讲解
mysql
存储
过程
...
赞
踩
article
web
安全
基础_
服务器
刺探...
本文介绍了网站搭建的基础,包括使用phpstudy搭建Apache+PHP+MySQL环境,以及专业术语如HTTP协议、...
赞
踩
article
凝思
服务器
6.0.42版本
操作系统
安装
JDK
_
凝思
42...
凝思
不支持yum,不能像centOS一样去卸载open
JDK
后进行
安装
,直接进行如下步骤就行(官方步骤)原因:被移除过了...
赞
踩
article
服务端
渲染(
SSR
)...
导读本文主要是从三个方面学习
服务端
渲染,内容整理自多个博客。
服务端
渲染是什么?什么是
服务端
渲染?(
服务端
渲染的运行机制)...
赞
踩
article
数据库
MySql
实验
学习
总结
(二)_
mysql
实验
总结
与
分析
...
实验
三 数据查询操作
实验
一、
实验
目的 熟练运用SQL语言实现数据更新功能,包括数据插入、删除、修改。二、
实验
内容1. 导...
赞
踩
article
mac
终端
命令
当前
用户
切换到
root
用户
_
mac
终端
怎么从
用户
返回到
usr
...
一、使用
命令
:sudo su -;
命令
执行后输入密码_
mac
终端
怎么从
用户
返回到
usr
mac
终端
怎么从
用户
返回到
usr
...
赞
踩
article
鸿蒙
(API 12
Beta3
版)【获取支持的
编解码
能力
】
音视频
编码...
因来源不同、
编解码
器协议不同以及设备在
编解码
能力
部署上的不同,在不同设备上开发者可用的
编解码
器及其
能力
是有差异的。为确保...
赞
踩
article
西门子
S7
-
1500
,
S7
-
1200
大型
生产线
程序
,模板
程序
_
西门子
1200
输送线
程序
...
总结来说,
西门子
S7
-
1500
和
S7
-
1200
是大型
生产线
控制器中常见的设备,具有强大的功能和灵活的编程能力。在实际的控...
赞
踩
article
北大
acm1328
,
贪心
算法
,
剖析
前端开发
未来的出路在哪里_北大计算机1328...
1 20 20 0Case 1: 2**题目大意:**本题是
贪心
算法
的一题解题思路
,
本题的题目是要我们建立雷达
,
给出我们...
赞
踩
article
Docker
安装
与使用_
docker
18.06
.3-
ce
...
系统环境#防火墙关闭[root@n1 ~]# systemctl status firewalld.servi
ce
● ...
赞
踩
article
解决
Navicat
for
Oracle
(MySQL)
导入
csv
文件
时出现中文乱码的问题_navic...
解决
Navicat
for
Oracle
(MySQL)
导入
csv
文件
时出现中文乱码的问题_
navicat
导入
csv
文件
乱...
赞
踩
article
Ceph
手动
部署
SSD_
ceph
增加
ssd
盘...
转https://github.com/MartinEmrich/kb/blob/master/
ceph
/Manual-...
赞
踩
article
Android
获取
唯一Id_
com
.
asus
.msa.
supplementarydid
.idida...
该博客介绍了如何在
Android
应用中实现设备唯一标识的
获取
,包括OAID(开放匿名设备标识符)和AAID(安卓广告标识...
赞
踩
相关标签
servlet
服务器
java
教育电商
社交电子
ip
flink
spark
docker
容器
运维
harmonyos
typescript
Navicat
数据库
postgresql
软件测试
测试工具
自动化测试
mysql
adb
android
web安全
php
安全