1. 所有事物以相同顺序更新表:
出现死锁的情况:
事物A
...
update tab_1 set ... where id = 1;
update tab_2 set ... where id = 1;
...
事物B
...
update tab_2 set ... where id = 1;
update tab_1 set ... where id = 1;
...
解决方案:
事物A
...
update tab_1 set ... where id = 1;
update tab_2 set ... where id = 1;
...
事物B
...
update tab_1 set ... where id = 1;
update tab_2 set ... where id = 1;
...
2. 按照一定的顺序对主表进行更新:
出现死锁的情况:
事物A
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
事物B
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
解决方案(按照id从小到大的顺序对主表进行更新):
事物A
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
事物B
...
update tab_1 set qty = qty - 1 where id = 1;
update tab_2 set qty = qty - 1 where id = 1;
...
update tab_1 set qty = qty - 1 where id = 2;
update tab_2 set qty = qty - 1 where id = 2;
...
update tab_1 set qty = qty - 1 where id = 3;
update tab_2 set qty = qty - 1 where id = 3;
...
update tab_1 set qty = qty - 1 where id = 4;
update tab_2 set qty = qty - 1 where id = 4;
...
总结:
第一种死锁情况比较容易发现和解决,第二种死锁情况要复杂一些!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26156924/viewspace-767508/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26156924/viewspace-767508/