mysql 中select for update 鎖表的範圍備註

mysql的鎖表範圍測試

1.主鍵明確時,行級鎖:

  解釋:指定主鍵並且數據存在時,僅鎖定指定的行,其它行可以進行操作

  實例:指定了鎖定id=1的行且數據存在①,在更新1時lock wait超時②,但是更新id不爲1的項目時可以直接更新③,釋放鎖後④,可以任意更新⑤

 

2.主鍵不明確時,表級鎖:

  解釋:指定主鍵不明確或者數據不存在時,整表鎖定

  指定主鍵不明確包括使用in、not in、<>等 

 

3.使用非主鍵限定時,表級鎖:

  解釋:如果where條件中不存在主鍵限定而採用非主鍵篩選,全表鎖定

 

所以要實現行級鎖來實現高併發場景時,必須明確指定主鍵,否則整個表鎖定,影響其它線程操作。

注意:測試時請開兩個窗口測試,並且 for update語句要在 begin後 commit前

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章