Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL事务隔离是如何工作的?_Mysql_Sql_Mysqli_Innodb - Fatal编程技术网

MySQL事务隔离是如何工作的?

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服务器版本:5.0.21-community-nt/innodb engine)

交易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提交,但它没有发生。有人能告诉我如何应用它以及它是如何工作的吗*(我可能完全错了)*.

因为事务A显示:

... Changed: 0 ...

该记录已将
前置时间设置为
2
,因此
更新没有改变任何内容,事务B只查看原始值。

可重复读取适用于单个事务。它说,您可以在事务中随时读取一个值,您将得到相同的答案。此外,也无法判断哪个事务首先启动,A或B。此外,一个事务可以随时中断,另一个事务可以运行或继续。您的示例没有反映您(在命令行上)先运行A到完成,然后运行B到完成的实际情况。这是序列化。

您使用的是什么数据库引擎?(MySQL服务器版本:5.0.21-community-nt/innodb-engine)这是一个问题。您不需要“启动事务”和“提交”语句吗?即使使用了相同的结果,您能提供一个答案不正确的示例吗?