2016-04-18 133 views
3

我使用两个窗口,因为我想实现事务的概念。MySQL即使提交后也没有显示更新的数据

窗口1:begin;

窗口1:update employee set salary = 45000 where ssn = '123456789';

窗口2:begin;

窗口2:select * from employee where ssn = '123456789';

这里,该命令将显示我以前的数据是正确的。

窗口1:commit;

窗口2:select * from employee where ssn = '123456789';

在这里,我应该得到的45000更新的薪水,但我的车窗2只显示以前的数据。我在哪里做错了?

回答

1

你的期望不正确,就这些。对方的工作中看到的交易取决于所谓的transaction isolation levels。默认情况下,MySQL使用repeatable read isolation level,这意味着:

如果事务隔离级别是可重复读(默认 级),所有持续读在同一个事务读取由第一次这种读取建立 快照交易。您可以通过提交当前的 交易并在发出新的查询之后为您的查询获取更新鲜的快照。

可以更改隔离级别读取承诺让你期望的行为:一个交易集合内

具有读提交的隔离级别,每个一致读,读了自己的新快照。

+0

谢谢你的回答。但我只是想知道如何改变我的SQL中的DEFAULT TRANSACTION ISOLATION LEVEL来读取提交的GLOBALLY。 –

+0

关于set transaction语法,请参阅mysql手册。 – Shadow

相关问题