hereとhereから読み取ったように、トランザクションレベルが REPEATABLE-READ の場合、他のトランザクションはこのトランザクションによってアクセスされているデータを読み取ることができません。しかし、テスト中にこれを見つけました。(MySQL サーバーのバージョン: 5.0.21-community-nt /innodb エンジン) .
トランザクション A:
mysql> SELECT @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
mysql> SET autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE manufacturer
-> SET lead_time = 22
-> WHERE mcode = 'ACL';
Query OK, 1 rows affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
取引B
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM Manufacturer ;
+-------+------------+-----------+
| mcode | mname | lead_time |
+-------+------------+-----------+
| ACL | ACL Cables | 2 |
| HAY | Haycarb | 4 |
| HYL | Hayleys | 5 |
+-------+------------+-----------+
3 rows in set (0.00 sec)
問題は、トランザクション A がコミットされるまでトランザクション B が待機することを期待していたのですが、それは実現しませんでした。