場(chǎng)景:
mysql當(dāng)使用InnoDB,update語(yǔ)句的where條件沒(méi)有使用主鍵索引(聚簇索引),而是使用非主鍵索引時(shí),會(huì)先鎖住當(dāng)前非主鍵索引,然后再?lài)L試獲取主鍵索引;? 如果事務(wù)一: 已經(jīng)獲取id =1 這一行的主鍵索引和 id = 2這一行的非主鍵索引; 事務(wù)二:??已經(jīng)獲取id =2 這一行的主鍵索引, id = 1這一行的非主鍵索引。兩個(gè)事務(wù)出現(xiàn)相互等待的循環(huán),也就是死鎖。

死鎖場(chǎng)景
解決方式:
update的時(shí)候,先select出所有需要更新的記錄,然后再u(mài)pdate,where只采用主鍵做條件。所有update語(yǔ)句將會(huì)只鎖住主鍵索引,而不會(huì)嘗試鎖非主鍵索引。