我似乎有一个错误的想法:
update table_name set id=222 where id >333;我的旧观点是,如果没有begin,commit就不会启动事务。但这似乎是错的。
但是当我阅读mysql 文档时,我发现似乎所有的sql都会在transaction.if中不显式地使用begin和commit,它将启动InnoDB中隐含的事务。
在InnoDB中,所有用户活动都发生在事务中。如果启用了自动提交模式,则每个SQL语句都会自行形成单个事务。默认情况下,MySQL为每个启用自动提交的新连接启动会话,因此如果该语句没有返回错误,则在每个SQL语句之后执行提交。如果语句返回错误,则提交或回滚行为取决于错误。参见14.21.4节,“InnoDB错误处理”。
我的问题是:
无论您是否显式地使用begin和commit,都会在事务中使用所有的sql。
发布于 2019-03-06 01:16:17
它将在单个事务中执行--除非使用START TRANSACTION & COMMIT的分组语句(无论其值如何,autocommit配置都将被忽略)。SET autocommit = 0/1可以用来控制飞行隔离的水平.为了在全局范围内改变行为,还提供了一个配置选项:
[mysqld]
autocommit=0“服务器系统变量”的文档详细解释了这一点:
autocommit模式。如果设置为1,则对表的所有更改立即生效。如果设置为0,则必须使用COMMIT接受事务,或者使用ROLLBACK取消事务。如果autocommit是0并将其更改为1,则MySQL将执行任何打开事务的自动COMMIT。另一种开始事务的方法是使用START TRANSACTION或BEGIN语句。
https://stackoverflow.com/questions/55014017
复制相似问题