当我从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)
事情是我希望事务B等到事务A提交但它没有发生。有人请告诉我如何应用这个以及它如何工作* (我可能完全错了)< / EM> *
答案 0 :(得分:0)
由于交易A显示:
... Changed: 0 ...
记录已将lead_time
设置为2
,因此UPDATE
未更改任何内容,而事务B只看到原始值。
答案 1 :(得分:0)
可重复读取适用于单个事务。它表示您可以在交易中随意阅读值,您将获得相同的答案。此外,无法确定哪个事务首先启动,A或B.此外,事务可以随时中断,另一个事务运行或继续。您的示例并不反映现实,因为您运行(在命令行上)首先完成,然后B完成。这是序列化。