mysql> SELECT @@session.tx_isolation; +------------------------+ | @@session.tx_isolation | +------------------------+ | REPEATABLE-READ | +------------------------+ 1 row in set
mysql> start transaction; Query OK, 0 rows affected
mysql> select * from test; +----+------+ | id | name | +----+------+ | 1 | bbb2 | | 2 | aaa2 | +----+------+ 2 rows in set
mysql> SELECT @@session.tx_isolation; +------------------------+ | @@session.tx_isolation | +------------------------+ | REPEATABLE-READ | +------------------------+ 1 row in set
mysql> start transaction; Query OK, 0 rows affected
mysql> select * from test; +----+------+ | id | name | +----+------+ | 1 | bbb2 | | 2 | aaa2 | +----+------+ 2 rows in set
mysql> up^date test set name="ccc1" where id=1; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0
mysql> up^date test set name="ddd1" where id=2; Query OK, 1 row affected Rows matched: 1 Changed: 1 Warnings: 0
事务A更新,给id为1和2的上锁。 mysql> in^sert into test(name) values("eee"); Query OK, 1 row affected 事务B正常插入 mysql> select * from test; +----+------+ | id | name | +----+------+ | 1 | ccc1 | | 2 | ddd1 | +----+------+ 2 rows in set mysql> commit; Query OK, 0 rows affected
mysql> commit; Query OK, 0 rows affected
mysql> select * from test; +----+------+ | id | name | +----+------+ | 1 | ccc1 | | 2 | ddd1 | | 3 | eee | +----+------+ 3 rows in set mysql> select * from test; +----+------+ | id | name | +----+------+ | 1 | bbb2 | | 2 | aaa2 | | 3 | eee | +----+------+ 3 rows in set --------------------------------------- 结论: REPEATABLE-READ级别下: 由于id是主键索引,是唯一索引,所以id=1和2的,只给自己上了锁(其他事务插入的id一定不是1和2),其他记录插入无影响。
|