mysql事务内的binlog是否保证表的更新顺序

标签 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先刷新到日志呢?

如何循环?

最佳答案

如果您使用的是 InnoDB 等事务引擎,则可以保证要么应用两个更新,要么都不应用。

如果您使用的是 MyISAM 等引擎,则事务可能会处于部分完成的状态,但是,即使使用二进制日志,它们也会按照与初始连接中的顺序相同的顺序完成。

当从同一连接(/事务)进行时,不会出现 B 在 A 之前更新的情况。如果您从 2 个不同的连接并行执行这些查询,那么它们可能以任一顺序发生。

关于mysql事务内的binlog是否保证表的更新顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31175517/

相关文章:

java - 在数据库事务期间进行 api 调用不是一个好习惯吗?

sql-server - 出现错误时退出并回滚脚本中的所有内容

mysql - 为什么 mysqlbinlog 实用程序显示两个值而不是一个?

mysql - mysql中的binlog是什么?

mysql - 如何将变量传递到 MySql 过程创建中

php - 更新 mysql 数据库密码字段安全性

java - 如何在 finally block 的事务上下文中处理异常?

mysql - Symfony2 - 将 mysql 数据库备份到文件中

mysql - 使用触发器将 MySQL 列添加到表中

MySQL bin 日志分成 block