Mysql的鎖

概念

  • 讀鎖=共享鎖: 拿到讀鎖,不會阻塞其餘用戶的讀操做
    select * from t_test lock in share mode;
  • 寫鎖=排他鎖: 拿到寫鎖,其餘用戶任何操做都被阻塞
    select * from t_test for update;
  • 顯示調用表鎖
    lock tables t_test read local;
    unlock tables;
  • 表鎖
    lock tables t_test write;
  • 查看鎖
    show OPEN TABLES where In_use > 0;

注:innodb 的行鎖是在有索引的狀況下,沒有索引的表是鎖定全表的.3d

死鎖

第一種狀況

  1. t1拿到id=4的行鎖
  2. t2拿到id=5的行鎖
  3. t1試圖去拿id=5的行鎖
  4. t2試圖去拿id=4的行鎖,產生了死鎖

第二種狀況

  1. t1獲取讀鎖
  2. t2獲取寫鎖
  3. t1獲取寫鎖,產生了死鎖

相關文章
相關標籤/搜索