• ADADADADAD

    mysql innodb的行锁(5) --next-Key 锁[ mysql数据库 ]

    mysql数据库 时间:2024-12-03 12:11:42

    作者:文/会员上传

    简介:

    间隙锁 next-key, 是针对范围条件不存在的记录上锁,避免不可重复读和幻象读。 如果是 read committed 的隔离级别,则不存在此问题。
    所以: 我们在开发中,如果使用 repeatable re

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    间隙锁 next-key, 是针对范围条件不存在的记录上锁,避免不可重复读和幻象读。 如果是 read committed 的隔离级别,则不存在此问题。
    所以: 我们在开发中,如果使用 repeatable read的隔离级别,要尽量减少针对一定范围记录的更新,不然会严重影响并发插入。

    特例: 通过相等的条件,申请一个不存在的记录的锁,也会使用next-key锁,并影响记录的插入。


    root@sakila 10:46:49>show variables like '%tx_isolation%';
    +---------------+-----------------+
    | Variable_name | Value|
    +---------------+-----------------+
    | tx_isolation | REPEATABLE-READ |
    +---------------+-----------------+
    1 row in set (0.00 sec)

    会话1:
    root@sakila 10:49:04>select * from tab_no_index where id=111 for update;
    Empty set (0.00 sec)

    会话2: 因为第一个会话加锁的记录不存在,所以对 next-key加锁了,没有范围,等于所有,所以插入不了新的记录了
    root@sakila 10:47:43>insert into tab_no_index values(200,'200');
    ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
    root@sakila 10:49:17>rollback;
    Query OK, 0 rows affected (0.01 sec)

    mysql innodb的行锁(5) --next-Key 锁.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: nextkeyinnodbmysql