行级锁和表级锁

    技术2025-08-13  8

    1、DML锁包括行级锁(TX)和表级锁(TM)

    2、行级锁不是单独存在的,当事务获得了某些数据行上的行级锁时,此事务同时获得了数据行所属表上的表级锁,因为表级锁能够防止系统中并发地执行有冲突的 DDL 操作,避免当前事务中的数据操作被并发地DDL 操作影响。

    3、表级锁分为5种,限制程度升序排列:

       (1)行共享(row share):与行排他类似,区别是别的事务还可以在此表上加任何排他锁。(除排他(exclusive)外)

       (2)行排他(row exclusive):其他事务依然可以并发地对相同数据表执行查询,插入,更新,删除操作,或对表内数据行加锁的操作,但不能有其他的排他锁(自身是可以的,没发现有什么用)

       (3)共享(share):在表没有被任何DML操作时,多个事务都可加锁,但只有在仅一个事务加锁的情况下只有此事务才能对表更新;当表已经被更新或者指定要更新时(select for update),任何事务都不能加此锁了。

       (4)共享行排他(share row exclusive):在表没有被任何DML操作时,只有一个事务可以加锁,可以更新,书上说别的事务可以使用select for update锁定选中的数据行,可是实验后没被验证。

       (5)排他(exclusive):在表没有被任何DML操作时,只有一个事务可以加锁,可以更新,与共享行排他的区别还没有发现

     

     

     

     否允许锁操作?   SQL 语句 表级锁模式 RS RX S SRX X
    SELECT...FROM table...  无  Y  Y  Y  Y  Y   INSERT INTO table ...  RX  Y  Y  N  N  N   UPDATE table ...  RX  Y*  Y*  N  N  N   DELETE FROM table ...  RX  Y*  Y*  N  N  N   SELECT ... FROM table FOR UPDATE OF ...  RS  Y*  Y*  Y*  Y*  N   LOCK TABLE table IN ROW SHARE MODE  RS  Y  Y  Y  Y  N   LOCK TABLE table IN ROW EXCLUSIVE MODE  RX  Y  Y  N  N  N   LOCK TABLE table IN SHARE MODE  S  Y  N  Y  N  N   LOCK TABLE table IN SHARE ROW EXCLUSIVE MODE  SRX  Y  N  N  N  N   LOCK TABLE table IN EXCLUSIVE MODE  X  N  N  N  N  N

     


    DML 语句 是否存在 行级锁 表级锁的 模式
    SELECT ... FROM table     INSERT INTO table ...  X  RX   UPDATE table ...  X  RX   DELETE FROM table ...  X  RX   SELECT ... FROM table ... FOR UPDATE OF ...  X  RS  LOCK TABLE table IN ...      ROW SHARE MODE   RS   ROW EXCLUSIVE MODE   RX  SHARE MODE    SSHARE EXCLUSIVE MODE    SRXEXCLUSIVE MODE    X

    遗留问题:SELECT FOR UPDATE属不属于DML

     

    最新回复(0)