0

正如我从这里这里读到的,如果事务级别是 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 提交但它没有发生。有人可以告诉我如何应用它以及它是如何工作的* (我可能做错了) *。

4

2 回答 2

0

由于交易 A 显示:

... Changed: 0 ...

记录已经lead_time设置为2,所以UPDATE没有改变任何东西,事务 B 只看到原始值。

于 2013-04-25T04:53:59.873 回答
0

可重复读取适用于单个事务。它表示您可以在交易中尽可能多地读取值,并且您将得到相同的答案。也没有办法知道哪个事务首先开始,A 还是 B。此外,一个事务可以随时中断,另一个事务运行或继续。您的示例没有反映现实,因为您首先运行(在命令行上)A 到完成,然后 B 到完成。这是序列化。

于 2013-04-25T05:27:07.193 回答