Mysql 死锁过程及案例详解之显式与隐式锁Explicit Table Lock Implicit Table Lock
顯式鎖Explicit Table Lock與隱式鎖Explicit Table Lock
顯式鎖Explicit Table Lock
顯式表鎖(Explicit Table Locks)即通過命令lock tables對表進行鎖定(共享或排他鎖)、FLUSH TABLES WITH READ LOCK(共享鎖),直到用顯式的命令UNLOCK TABLES語句才能解鎖。當FLUSH TABLES WITH READ LOCK不接表名時會觸發metadata lock。
示意案例
-- 鎖定emp表只能讀、寫 LOCK TABLES emp READ, dept WRITE;-- 在該會話里執行更新操作 UPDATE ShenLiang2025.emp SET sal=1800.00 WHERE empno=7369 > 1099 - Table 'emp' was locked with a READ lock and can't be updated > 時間: 0s-- 在該會話里對dept執行更新操作 UPDATE dept SET loc='NEW YORK3' WHERE deptno=10 > Affected rows: 1 > 時間: 0.01s-- 在該會話里對dept執行查詢操作時會進入持續等待。--通過執行unlock tables釋放表的鎖定。 UNLOCK TABLES-- 沒有被鎖定的表執行查詢時報錯。 SELECT * FROM salgrade > 1100 - Table 'salgrade' was not locked with LOCK TABLES > 時間: 0s隱式鎖Implicit Table Lock
隱式鎖(Implicit Table Locks), InnoDB在表級用到意向鎖。常見的語句如:
意向共享鎖:SELECT ... FOR SHARE 跟SELECT ... LOCK IN SHARE MODE效果一樣。
意向排他鎖:SELECT ... FOR UPDATE或者其它的DML語句(這里不含SELECT),如果涉及到外鍵里引用的表也會被鎖定。
關于兩個意向鎖的兼容性可見下表
| Exclusive (X) | Intention Exclusive (IX) | Shared (S) | Intention Shared (IS) | |
| Exclusive (X) | ? | ? | ? | ? |
| Intention Exclusive (IX) | ? | ? | ? | ? |
| Shared (S) | ? | ? | ? | ? |
| Intention Shared (IS) | ? | ? | ? | ? |
注:
1 這里Shared (S)是共享鎖,Exclusive (X)是排他鎖,Intention Exclusive (IX)是意向排他鎖,Intention Shared (IS)是意向共享鎖。
示意案例
--Step1 執行未完成事務(更新數據)START TRANSACTION> OK> 時間: 0s#SELECT * FROM emp WHERE empno=7499UPDATE emp SET sal=11600.00 WHERE empno=7499> Affected rows: 1> 時間: 0s--Step2 查看當前鎖的詳細信息mysql> SELECT * FROM performance_schema.data_locks WHERE LOCK_TYPE = 'TABLE' \G*************************** 1. row ***************************ENGINE: INNODBENGINE_LOCK_ID: 139740117241048:1111:139740049386240ENGINE_TRANSACTION_ID: 38166THREAD_ID: 48EVENT_ID: 56OBJECT_SCHEMA: ShenLiang2025OBJECT_NAME: empPARTITION_NAME: NULLSUBPARTITION_NAME: NULLINDEX_NAME: NULLOBJECT_INSTANCE_BEGIN: 139740049386240LOCK_TYPE: TABLELOCK_MODE: IXLOCK_STATUS: GRANTEDLOCK_DATA: NULL1 row in set (0.02 sec)通過結果可以看出當前是IX鎖。-- Step3 最后通過rollback回滾該事務。ROLLBACK;總結
以上是生活随笔為你收集整理的Mysql 死锁过程及案例详解之显式与隐式锁Explicit Table Lock Implicit Table Lock的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鱼露汁能不能加凉皮里面的水?
- 下一篇: Mysql 死锁过程及案例详解之记录锁与