Mat*_*aur 2 mysql innodb transactions
我似乎\xe3\x80\x80有一个错误的想法:
\n\nupdate table_name set id=222 where id >333;\nRun Code Online (Sandbox Code Playgroud)\n\n我的旧观点是上面的单个sql没有begin并且commit不会启动事务。\n但这似乎是错误的。
但是当我阅读mysql文档时,我发现似乎所有sql都会在一个事务中。如果你不显式使用beginand commit,它将在InnoDB中隐式启动事务。
\n\n\n在 InnoDB 中,所有用户活动都发生在事务内。如果启用自动提交模式,则每个 SQL 语句都会自行形成一个事务。默认情况下,MySQL 在启用自动提交的情况下为每个新连接启动会话,因此如果该语句未返回错误,MySQL 会在每个 SQL 语句后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。请参见第 14.21.4 节,\xe2\x80\x9cInnoDB 错误处理\xe2\x80\x9d。
\n
是所有的sql都会在事务中执行,无论你是否使用begin和commit显式。
它将在单个事务中执行- 除非使用START TRANSACTION&分组语句COMMIT(autocommit然后配置将被忽略,无论它的值是什么)。SET autocommit = 0/1可用于动态控制隔离级别。还有一个配置选项,以便全局更改行为:
[mysqld]
autocommit=0
Run Code Online (Sandbox Code Playgroud)
“服务器系统变量”的文档详细解释了它:
模式
autocommit。如果设置为1,则对表的所有更改都会立即生效。如果设置为0,您必须使用COMMIT来接受交易或ROLLBACK取消交易。如果autocommit是0并且您将其更改为1,MySQL 会自动执行COMMIT任何打开的事务。开始事务的另一种方法是使用START TRANSACTIONorBEGIN语句。
| 归档时间: |
|
| 查看次数: |
690 次 |
| 最近记录: |