死锁定义:指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
产生原因:
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) |