【发布时间】:2019-02-28 06:42:59
【问题描述】:
免责声明:
我已经阅读了For a writeless transaction which is cheaper/quicker: COMMIT or ROLLBACK?,这与我的问题类似,但与 MS SQL Server 相关,并且已经很老了。此外,这个答案让我有些意外,所以我想知道 2018 年 MySQL 5.7 的情况如何。
话虽如此:
假设以下场景:
- 我正在运行 MySQL 5.7。
- 我已关闭隐式事务。
- 我有一个 InnoDB 表。
- 我
BEGIN一个事务。 - 我
SELECT ... FOR UPDATE锁定了表中的几行(大多数情况下为一行)。 - 我检查了被选择/锁定的行,得出的结论是数据没有问题,因此...
- ...我决定不更改被锁定行中的任何数据。
现在我想完成交易。我可以通过正常方式做到这一点,即发出COMMIT,在这种情况下只会删除锁,或者作为替代方法,发出ROLLBACK,在这种情况下也只会删除锁。
这两种方法的结果是一样的,但我的感觉是在成本/性能方面可能会有很大的不同。
如果被锁定的行的比例总是可以忽略不计(例如 1/1e6 之类的),有人可以告诉我推荐哪种方法,并可能提供一些背景(或一些背景的链接)?
【问题讨论】:
-
COMMIT 和 ROLLBACK 如果想要查看 MySQL 源代码的答案,会做不同的事情。
-
我有一个类似的问题,想知道您是否可以尝试一下,如果可以,结果如何?
标签: mysql transactions innodb