【发布时间】:2019-03-06 01:12:52
【问题描述】:
我好像有一个错误的想法:
update table_name set id=222 where id >333;
我的旧意见是没有begin 和commit 的单个sql 将不会启动事务。
但这似乎是错误的。
但是当我阅读 mysql doc 时,我发现似乎所有的 sql 都将在一个事务中。如果你不显式使用 begin 和 commit,它将在 InnoDB 中隐式启动事务。
在 InnoDB 中,所有用户活动都发生在事务中。如果启用了自动提交模式,则每个 SQL 语句都会单独形成一个事务。默认情况下,MySQL 在启用自动提交的情况下为每个新连接启动会话,因此如果该语句没有返回错误,MySQL 会在每个 SQL 语句之后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。请参阅第 14.21.4 节,“InnoDB 错误处理”。
我的问题:
无论你是否显式使用begin和commit,事务中是否都会执行所有sql。
【问题讨论】:
标签: mysql transactions innodb