好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

数据库update死锁

cross_marketing set gmtModified = NOW(), pageview = pageview + #extpageview# WHERE marketingId = #marketingId#

 

第一次调用时,marketingId传入值顺序: 1, 3,5, 12 第二次调用时,marketingId传入值顺序:1,2, 5,3   每次update时,会锁行。 那么第一次调用时,顺序锁行,当更新完3,准备跟新5的时候,发现5已经被第二次调用锁行了,就等待。而此时的第二次调用刚好跟新完5准备去拿3的锁,却发现被第一次调用占有,于是就出现死锁。   所以,我们要在批量更新,删除操作的时候,按照一个固定的顺序来排序,然后进行操作。 前面的例子,如果按照marketingId从小到大排序,就会变成: 第一次调用时,marketingId传入值顺序: 1,3,5,12 第二次调用时,marketingId传入值顺序:1,2,3, 5 如此,就避免了死锁的发生。

数据库update死锁

标签:

查看更多关于数据库update死锁的详细内容...

  阅读:34次