首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL事务隔离是如何工作的?

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

Stack Overflow用户
提问于 2013-04-25 03:53:45
回答 2查看 93关注 0票数 0

当我从这里这里读取时,如果事务级别是可重复的--读取任何其他事务都不能读取由该transaction.But访问的数据,我在测试时发现了这一点。* (MySQL服务器版本:5.0.21-community /innodb engine)*。

事务A:

代码语言:javascript
复制
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

代码语言:javascript
复制
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提交,但它没有发生。如何应用这个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-25 05:27:07

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

票数 0
EN

Stack Overflow用户

发布于 2013-04-25 04:53:59

因为交易A显示:

代码语言:javascript
复制
... Changed: 0 ...

该记录已经将lead_time设置为2,因此UPDATE没有更改任何内容,事务B只看到原始值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16206096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档