2011-11-07 99 views
20

我正在测试innoDB表中的事务支持,而且我试图在MyIsam表上运行相同的事务,并且令人惊讶的是它工作正常。我假设myIsam表中的查询是一个接一个地执行的,而不是在一个原子操作中执行,并且我没有从START TRANSACTION和COMMIT和ROLLBACK操作中得到任何错误。我感兴趣的是MyIsam引擎是忽略这个操作还是执行一些操作?MyIsam引擎事务支持

+0

阅读这篇文章“工作”意味着你能回滚DML语句,或者你没有得到语法错误? –

+0

我做了一个简单的选择和插入语句,并没有收到任何错误。 – Headshota

+2

好吧,然后看@ Darhazer的答案。您可能不会遇到任何错误,但您实际上不会有交易。发出ROLLBACK时,你的INSERT不会被撤销。 –

回答

26

MyISAM有效地工作在自动提交模式(因为它不是一个事务引擎),它只是忽略提交/回滚。

实际上,存储引擎是MySQL体系结构中的一个不同层,与SQL解析器分开,SQL层使用低级API与存储引擎通信,这就是存在常见SQL和引擎的原因,支持不同特色的子集。你可以看到非常高层次的体系结构here

2

MyIsam tabels不是为此而构建的。即使在5+版本中也没有。它只是为了存储数据。它不能保证交易或数据恢复。您应该为此使用InnoDB,并且如果需要的话,使用MyIsam进行复制(由于没有跨表检查,因此使用MyIsam表检索数据会更快)。

您可以从MySQL http://forums.mysql.com/read.php?21,68686,69229#msg-69229