【问题标题】:Transaction necessary for single update query?单个更新查询所需的事务?
【发布时间】:2013-07-25 11:11:07
【问题描述】:

我在 InnoDB 表上有一个 mysql 查询,如下所示:

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

我需要为此使用交易吗?不使用事务会不会发生任何不希望的事情?

【问题讨论】:

标签: mysql transactions innodb


【解决方案1】:

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

当您合并多个更改并希望它们“同时”或“根本不”生效时,您真的只需要事务。

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

【讨论】:

  • @Gordon,这个默认事务的隔离级别是多少?如果我们需要update t set c=c+1,如果 10k 用户同时运行该语句,我们会丢失更新吗?
  • @Gordon 您提供链接的文档没有提到 MySQL 将所有单个命令包装在事务中,那么您从哪里获得这些信息?
  • @Scadge 。 . .它非常清楚地指出:“默认情况下,MySQL 在启用自动提交模式的情况下运行。”。
  • @GordonLinoff 所以这意味着如果您禁用自动提交并使用 10 个字段执行单个更新,如果中间出现任何问题,数据可能会损坏?听起来不太好,假设关闭自动提交不是一个罕见的用例。
猜你喜欢
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 2020-01-19
  • 2018-12-01
相关资源
最近更新 更多