程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql innodb行鎖解鎖後出現1213死表現象Deadlock found when解決

mysql innodb行鎖解鎖後出現1213死表現象Deadlock found when解決

編輯:MySQL綜合教程

mysql innodb行鎖解鎖後出現1213死表現象Deadlock found when解決   出現這個原因要記住一點就是:innodb的行鎖 和解鎖都是針對主鍵索引的。如果查詢時根據索引鎖表,但更新時卻不是通過主鍵更新,那麼等待的解鎖查詢的進程將會報1213錯誤,程序裡有可能返回一個null值   實例: table  soldgoods (表名) soldgoodsID 索引 productid    businessid    開啟線程A 執行: set autocommit=0; select businessid from soldgoods where soldgoodsID = 'ac63837c76222e4a5419e2529d775ae4' for UPDATE; 查詢得過結果   開啟線程B 執行: set autocommit=0; select businessid from soldgoods where soldgoodsID = 'ac63837c76222e4a5419e2529d775ae4' for UPDATE; 查詢等待解鎖   這個時候在線程A中執行: update soldgoods set productid = 2 where businessid = '0a527df4763c3dc71cbafebec5a8d787' 不是根據主鍵而去更新鎖表的值   線程B會出現: [Err] 1213 - Deadlock found when trying to get lock; try restarting transaction   如果將最後線程A中執行的語句改變: update soldgoods set productid = 2 where soldgoodsID = 'ac63837c76222e4a5419e2529d775ae4' 根據索引修改值 然後 commit; 提交事務。線程B就能順利得到查詢值了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved