如果多个事务同时提交,这些binlog事件如何记录? 连续的还是离散的?

连续的可能是这样的:

trx1 begin transction
trx1 update someting
trx1 commit
....
trx2 begin transction
trx2 update someting
trx2 commit

离散的可能类似于:

trx1 begin transction
trx2 begin transction
trx1 update someting
trx2 update someting
trx2 commit
trx1 commit

推荐答案

https://dev.mysql.com/doc/refman/8.0/en/binary-log.html表示:

在未提交的事务中,更改事务表(如InnoDB表)的所有更新(UPDATE、DELETE或INSERT)都会被缓存,直到服务器收到COMMIT语句.此时,mySQLD在执行提交之前将整个事务写入二进制日志(log).

这意味着二进制日志(log)写入整个事务,如您的第一个示例所示.它们并不像您的第二个示例中那样是交错的.

如果在给定事务期间同时更新事务性表(例如InnoDB)和非事务性表(例如MyISAM),事情会变得更加有趣.

我建议您始终使用InnoDB,除非您特别需要MyISAM的某些功能.

Mysql相关问答推荐

MySQL在带有特定属性值上的对象的数组的杨森对象中搜索

默认情况下,MariaDB是否限制为本地主机?

运行简单查询时Prisma预准备语句错误

为什么嵌套循环逻辑不能按预期工作

如何在 MySQL 中对同一个表的多个列进行 INNER JOIN

mysql 代码给我的外键格式不正确

是否可以使用 IN 或 NOT IN 从没有关联其他表中任何行的表中返回这些名称?

SQL:如何为给定组中的所有记录 Select 一列与另一列不匹配的位置

MYSQL 删除两个已知字符串之间的字符串

过滤查询结果

如何查看 rdsadmin 在 mysql 实例上的权限?

如何使用 C++ 连接 mySQL 数据库

MySQL:将日期时间插入其他日期时间字段

如何通过一个查询批量更新 mysql 数据?

如何为 php 启用 mysqlnd?

基于字符串动态创建 PHP 对象

我应该使用什么列数据类型来存储大量文本或 html

在 MYSQL 中按枚举字段排序

utf8mb4_unicode_ci 与 utf8mb4_bin

如何将本地托管的 MySQL 数据库与 docker 容器连接