MySQL如何处理死锁?MySQL死锁是怎么形成的?

422 ℃

当MySQL中出现死锁时,InnoDB存储引擎的默认行为是回滚一个事务,从而释放死锁。InnoDB存储引擎检测到死锁后,会选择一个事务进行回滚,比如线程1的事务,然后线程2的事务可以继续执行。

MySQL死锁代码示列:

sql
# 线程1
START TRANSACTION;
UPDATE table1 SET col = 1 WHERE id = 1; 
# 等待线程2释放锁

# 线程2 
START TRANSACTION;
UPDATE table1 SET col = 1 WHERE id = 2;
# 等待线程1释放锁  

# 死锁产生,线程1等待线程2,线程2等待线程1

线程1会收到类似如下错误代码:

Deadlock found when trying to get lock; try restarting transaction

//提示发现死锁,事务被回滚。

MySQL死锁的四个必要条件:

1、互斥:一个资源一次只能被一个事务使用。

2、请求并保持:一个事务已经保持了一个资源,并请求一个新的资源。

3、不可剥夺:在交易没有被自愿释放的情况下,持有的资源不能被其他交易强行拿走。

4、循环等待:在两个或多个事务之间形成一个等待链。

避免僵局的措施:

1、确保所有事务以相同的顺序请求锁。

2、避免一个事务请求其他事务持有的锁。

3、锁定时间越短越好。

4、尽量避免更新多个表的语句,可以拆分成多个语句分别更新。

mysql读取指定表中的中间断数据(跳过前面的数据)

mysql语法删除指定区域的数据,比如ID、时间等等

mysql语法根据指定条件做一个数据汇总接口

一款免费开源的 JavaScript 数据库——PouchDB

MYSQL语法select查询只显示中文内容(select查询内容屏蔽英文数据)

标签: MySQL死锁

上面是“MySQL如何处理死锁?MySQL死锁是怎么形成的?”的全面内容,想了解更多关于 mysql 内容,请继续关注web建站教程。

当前网址:https://m.ipkd.cn/webs_11860.html

声明:本站提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请发送到邮箱:admin@ipkd.cn,我们会在看到邮件的第一时间内为您处理!

Trae:新一代免费的AI编程工具
帝国CMS7.5版多访问端升级:支持在主端刷新各端
vue开发中谷歌浏览器console.log无法打印内容怎么解决
wordpress新建页面中页面属性里没有“模板”选项解决方法
移动端页面根据不同分辨率自动改变文字(图片)大小
wordpress中wpdb如何直接调用MySQL命令