“InnoDB并不真正支持交易” - 什么?

时间:2011-04-08 20:31:03

标签: transactions innodb

我们的系统工程师利用一切机会提醒每个人他有多讨厌MySQL,他多喜欢postgres以及我们需要切换。他的抱怨有时看起来很合理,但最近他们把这种抱怨包括在内。他现在声称的一件事是“InnoDB并不真正做交易。只有假装。”是的,这是直接引用。实际上,他声称innodb中所有与事务相关的命令实际上都是NOP。这是对他刚刚在五分钟前说过的话的解释:

  

“我最近发现了这一点,因为我把所有内容保存在一个事务中。我去做了回滚,它不会让我。经过一些挖掘后我发现innodb中的所有事务命令实际上都是NOP 。“

这对我来说听起来非常荒谬。这意味着没有人能够使用innodb成功回滚交易,或者实际上甚至已经执行了一次交易。这意味着innodb的开发人员是彻头彻尾的谎言,并认为我们都愚蠢到可以堕落。

是否有任何可能的方式,一点也没有,他的主张有一丝真理?或许,有一种扭曲的方式来解释这种方式听起来并不那么疯狂?

编辑澄清:我不是想咆哮。我问,因为我无法找到他的说法的证据,他是否完全错了,或者是否有一些我应该知道的事实。

2 个答案:

答案 0 :(得分:5)

你可以证明这是错误的:用一些虚拟数据创建一个InnoDB表,然后

BEGIN TRANSACTION
然后做一些愚蠢的事情,比如

DELETE FROM TABLE

(注意缺少where子句),然后执行

ROLLBACK

当表中的数据再次神秘时,InnoDB会进行交易而你的同事只是 - 被误导。

请注意,他可能只是将InnoDB与MyISAM混在一起。

答案 1 :(得分:4)

没有。这是错的。我敢打赌他的InnoDB提交刷新设置错误,因此交易无法回滚。

基本答案是:InnoDB的重点是事务和行级锁定,但事务是InnoDB不可或缺的一部分。

此外,他可能会做一些愚蠢的事情,比如不关闭AutoCommit,因此他的“交易”中的每个SQL语句都会提交,从而变成自己的交易。