Chinaunix首页 | 论坛 | 博客
  • 博客访问: 371282
  • 博文数量: 166
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1640
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-05 11:44
个人简介

文章不在长,坚持不懈记录下努力前行的脚步

文章分类

全部博文(166)

文章存档

2017年(19)

2016年(59)

2015年(88)

我的朋友

分类: Mysql/postgreSQL

2015-06-12 21:39:54

死锁定义:指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
产生原因:
1、数据冲突
2、存储引擎实现方式导致
例如:
事务一
start transaction;
update test set close=123 where id=4;
update test set close=123 where id=3;
commit;
事务二
start transaction;
update test set high=789 where id=3;
update test set high=456 where id=4;
commit;
当两个事务都执行了第一条语句,接着同时执行第二条语句就会产生死锁;
有先后顺序时有可能发生锁等待。


总结:尽量顺序执行sql能有效的减少或避免死锁,即便是这样有的存储引擎也会产生死锁。
innodb处理死锁的方式是将持有最少行级排它锁的事务回滚。
应用设计:重新执行死锁回滚后的事务。
阅读(931) | 评论(0) | 转发(0) |
0

上一篇:1.3.1隔离级别

下一篇:1.3.3mysql事务日志

给主人留下些什么吧!~~