【问题标题】:MyIsam engine transaction supportMyIsam 引擎事务支持
【发布时间】:2011-12-23 13:47:13
【问题描述】:

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

【问题讨论】:

  • "worked" 表示您能够回滚 DML 语句或者您没有遇到语法错误?
  • 我做了一个简单的选择和插入语句,没有收到任何错误。
  • 好吧,然后看看@Darhazer 的回答。您可能不会收到任何错误,但实际上不会有交易。当您发出ROLLBACK 时,您的INSERT 不会被撤消。

标签: mysql myisam


【解决方案1】:

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

其实存储引擎是 MySQL 架构中的不同层,与 SQL 解析器分离,SQL 层通过较低级别的 API 与存储引擎通信,这就是为什么有一个通用的 SQL 和引擎,支持不同的子集的精选。你可以看到架构的非常高级的概述here

【讨论】:

    【解决方案2】:

    MyIsam 表格不是为此而建的。甚至在 5+ 版本中也没有。它仅用于存储数据。它不保证交易或数据恢复。您应该为此使用 InnoDB,如果需要,可以使用 MyIsam 进行复制(使用 MyIsam 表检索数据会更快,因为没有跨表检查)。

    您可以从 MySQL 阅读这篇文章 http://forums.mysql.com/read.php?21,68686,69229#msg-69229

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 1970-01-01
      • 2012-10-02
      • 2022-11-23
      • 1970-01-01
      • 2011-03-25
      • 2020-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多