【发布时间】:2015-07-02 04:18:10
【问题描述】:
start transaction;
update a set b=1 where a=1;
update b set c=1 where a=1;
commit;
二进制日志会按顺序记录a、b的更新,但是b的更新什么时候会比a先刷新到日志呢?
如何复现?
【问题讨论】:
标签: mysql transactions binlog
start transaction;
update a set b=1 where a=1;
update b set c=1 where a=1;
commit;
二进制日志会按顺序记录a、b的更新,但是b的更新什么时候会比a先刷新到日志呢?
如何复现?
【问题讨论】:
标签: mysql transactions binlog
如果您使用的是 InnoDB 等事务引擎,则可以保证要么应用两个更新,要么都不应用。
如果您使用诸如 MyISAM 之类的引擎,则事务可能会处于部分完成状态,但是,即使使用二进制日志,它们也会按照与初始连接中相同的顺序完成。
当从同一个连接(/事务)建立时,B 不会在 A 之前更新。如果您从 2 个不同的连接并行执行这些查询,那么它们可能会以任一顺序发生。
【讨论】: