對一張表做批量編輯,
表的基本介面如下:
t_test:
bigint id,
int status,
varchar clientid,
更新語句是:
update t_test set status=2 where clientid='...'
當批量操作時,批量提交多次update語句,每次語句執行是需要做以下操作:
1.獲取主鍵索引
2.獲取clientid列
當多次提交時,2次update,分別通過主鍵id和clientid對同一行加上行鎖後,都在等待對方釋放鎖,從而造成死鎖
方案:通過id作為條件update,不引入主鍵索引之外的字段,避免死鎖的機會
乙個問題記錄2014 10 30
問題背景 公升級所有的動態庫,客戶端獲取不到伺服器資料,並且公升級實際伺服器時沒有備份資料 環境涉及lisp,dll,config 問題查詢過程 1 先在實際伺服器上查詢,看日誌,發現可能是 原因。2 然後在測試伺服器上查詢是否是 的原因,但是發現測試伺服器各種缺必要的資料,也就是說測試伺服器不滿足...
乙個Mybatis問題記錄
工作中基本上都會使用mybatis。有一次為了達到控制許可權的效果,又為了最少的修改現有的 使用了自定義的mybatis的外掛程式,在運算元據的時候做一次查詢,判斷是否有許可權操作。這種許可權控制是很暴力且有很多漏洞的。問題1在一次操作中,當引數只有乙個且引數型別為long型時,預設這個引數是表a的...
資料庫 mysql 死鎖問題記錄
工作中遇到了deadlock found when trying to get lock try restarting transaction 資料庫發生死鎖了.資料庫的事務隔離級別是rr repeatable read 1 通過命令 show engine innodb status,將statu...