MySQL事务隔离是如何工作的?
当我从中读取时,如果事务级别是可重复读取的,则没有其他事务可以读取此事务访问的数据。但我在测试时发现了这一点。(MySQL服务器版本:5.0.21-community-nt/innodb engine) 交易A:MySQL事务隔离是如何工作的?,mysql,sql,mysqli,innodb,Mysql,Sql,Mysqli,Innodb,当我从中读取时,如果事务级别是可重复读取的,则没有其他事务可以读取此事务访问的数据。但我在测试时发现了这一点。(MySQL服务器版本:5.0.21-community-nt/innodb engine) 交易A: mysql> SELECT @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in
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提交,但它没有发生。有人能告诉我如何应用它以及它是如何工作的吗*(我可能完全错了)*.因为事务A显示:
... Changed: 0 ...
该记录已将
前置时间设置为2
,因此更新没有改变任何内容,事务B只查看原始值。可重复读取适用于单个事务。它说,您可以在事务中随时读取一个值,您将得到相同的答案。此外,也无法判断哪个事务首先启动,A或B。此外,一个事务可以随时中断,另一个事务可以运行或继续。您的示例没有反映您(在命令行上)先运行A到完成,然后运行B到完成的实际情况。这是序列化。您使用的是什么数据库引擎?(MySQL服务器版本:5.0.21-community-nt/innodb-engine)这是一个问题。您不需要“启动事务”和“提交”语句吗?即使使用了相同的结果,您能提供一个答案不正确的示例吗?