MySQL甚至在提交后也没有显示更新的数据

时间:2016-04-18 06:18:03

标签: mysql sql transactions

我正在使用两个窗口,因为我想实现事务的概念。

Window1:begin;

Window1:update employee set salary = 45000 where ssn = '123456789';

Window2:begin;

Window2:select * from employee where ssn = '123456789';

此处,此命令显示以前的数据是正确的。

Window1:commit;

Window2:select * from employee where ssn = '123456789';

在这里,我应该获得45000的更新工资。但我的窗口2仅显示以前的数据。我在哪里做错了?

1 个答案:

答案 0 :(得分:1)

你的期望是不正确的,就是这样。从彼此的工作中看到的交易由所谓的transaction isolation levels决定。默认情况下,mysql使用repeatable read isolation level,这意味着:

  

如果事务隔离级别是REPEATABLE READ(默认值)   等级),同一事务中的所有一致读取读取   由该事务中的第一个这样的读取建立的快照。您   通过提交当前可以为您的查询获取更新的快照   交易以及发出新查询之后。

您可以将隔离级别更改为read committed以启用您期望的行为:

  

使用READ COMMITTED隔离级别,事务中的每个一致读取都会设置并读取自己的新快照。