单个更新查询需要事务吗?

15

我有一个针对InnoDB表的mysql查询,像这样:

UPDATE items SET qty = qty + 5 WHERE item_id = 1234 LIMIT 1;

我需要为此使用事务吗?如果不使用事务会发生什么不良后果吗?


不,你不需要为此使用事务。 - Morten Strand-Langbakk
1个回答

24

没有什么严重的事情会发生。默认情况下,MySQL将所有单个更新/插入/删除命令包装在一个事务中。如果更新出现问题,则应正确地回滚事务。

只有在组合多个更改并希望它们全部"同时"或者"根本不"生效时才需要使用事务。

您可以在文档中了解更多信息。


2
@Gordon,这个默认事务的隔离级别是什么?如果我们需要执行 update t set c=c+1,那么如果有10k个用户同时运行该语句,我们会遇到丢失更新的问题吗? - Pacerier
@Gordon,您提供的链接文档并未提到MySQL将所有单个命令封装在事务中,那么您从哪里获取了这些信息? - Scadge
@Scadge...它非常明确地说明:"默认情况下,MySQL运行时启用自动提交模式。" - Gordon Linoff
1
@GordonLinoff,这意味着如果您禁用自动提交并执行包含10个字段的单个更新,如果在中途出现任何问题,数据可能会损坏?听起来不太好,假设关闭自动提交不是一个罕见的使用情况。 - Scadge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接