需了解知识点:MySQL的存储引擎InnoDB的事务隔离级别REPEATABLE READ。
快照读:读取的是快照版本,也就是历史版本。普通的SELECT就是快照读,
当前读:读取的是最新版本。UPDATE、DELETE、INSERT、SELECT … LOCK IN SHARE MODE、SELECT … FOR UPDATE是当前读。
mysql> use test;
Database changed
| session1 | session2 |
T1 | set autocommit = 0; | set autocommit = 0; |
T2 | select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set, 1 warning (0.00 sec) | select @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set, 1 warning (0.00 sec) |
T3 | select * from product; +----+-----+ | id | id2 | +----+-----+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | | 6 | 6 | | 7 | 7 | | 8 | 8 | | 9 | 9 | | 10 | 10 | | 11 | 11 | | 12 | 12 | +----+-----+ 12 rows in set (0.00 sec) | select * from product; +----+-----+ | id | id2 | +----+-----+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | | 6 | 6 | | 7 | 7 | | 8 | 8 | | 9 | 9 | | 10 | 10 | | 11 | 11 | | 12 | 12 | +----+-----+ 12 rows in set (0.00 sec) |
T4 |
| mysql> insert into tb1 values(13,13); Query OK, 1 row affected (0.00 sec) |
T5 |
| mysql> commit; Query OK, 0 rows affected (0.00 sec) |
|
| mysql> select * from tb1; +----+-----+ | id | id2 | +----+-----+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | | 6 | 6 | | 7 | 7 | | 8 | 8 | | 9 | 9 | | 10 | 10 | | 11 | 11 | | 12 | 12 | | 13 | 13 | +----+-----+ 13 rows in set (0.00 sec) |
T6 | mysql> select * from tb1; +----+-----+ | id | id2 | +----+-----+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | | 6 | 6 | | 7 | 7 | | 8 | 8 | | 9 | 9 | | 10 | 10 | | 11 | 11 | | 12 | 12 | +----+-----+ 12 rows in set (0.00 sec) |
|
T7 | mysql> select * from tb1 lock in share mode; +----+-----+ | id | id2 | +----+-----+ | 1 | 1 | | 2 | 2 | | 3 | 3 | | 4 | 4 | | 5 | 5 | | 6 | 6 | | 7 | 7 | | 8 | 8 | | 9 | 9 | | 10 | 10 | | 11 | 11 | | 12 | 12 | | 13 | 13 | +----+-----+ 13 rows in set (0.00 sec) |
|
T8 | mysql> commit;
mysql> select * from tb1; |
|