Mysql Innodb RR隔离等级下的“幻读”问题

间隙锁是用来解决innodb在RR隔离等级下幻读的问题,目前发现有两种情况还是会产生幻读。

  1. 事务A先进行快照读,事务B新增操作,事务B提交;
    事务A再进行当前读,发现多了一条数据;
    sql语句如下:
    SELECT * FROM TABLE WHERE id < 10;
    INSERT INTO TABLE (id) VALUES (9);
    SELECT * FROM TABLE WHERE id < 10 LOCK IN SHARE MODE;

  2. 第二种严格的说并不是幻读,是mvcc的特性;
    事务A快照读,事务B新增操作,事务B提交;
    事务A批量更新;
    事务A快照读,发现多了一条数据,并且多的那条数据被自己的批量更新影响了;
    sql语句如下:
    SELECT * FROM TABLE WHERE id < 10;
    INSERT INTO TABLE (id) VALUES (9);
    UPDATE TABLE SET age = 26 WHERE id < 10;
    SELECT * FROM TABLE WHERE id < 10;

你可能感兴趣的:(node.js,mysql)