start transaction;
update a set b=1 where a=1;
update b set c=1 where a=1;
commit;
二进制日志会按顺序记录a、b的更新,但是b的更新什么时候会比a先刷新到日志呢?
如何循环?
最佳答案
如果您使用的是 InnoDB 等事务引擎,则可以保证要么应用两个更新,要么都不应用。
如果您使用的是 MyISAM 等引擎,则事务可能会处于部分完成的状态,但是,即使使用二进制日志,它们也会按照与初始连接中的顺序相同的顺序完成。
当从同一连接(/事务)进行时,不会出现 B 在 A 之前更新的情况。如果您从 2 个不同的连接并行执行这些查询,那么它们可能以任一顺序发生。
关于mysql事务内的binlog是否保证表的更新顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175517/