【问题标题】:MySQL:START TRANSACTION - UPDATE - ROLLBACK : Non-Transactional TablesMySQL:开始事务 - 更新 - 回滚:非事务表
【发布时间】:2016-07-26 03:58:11
【问题描述】:

我正在尝试运行这些查询以执行 ROLLBACK,但我不太确定自己做错了什么,但我收到了警告:

某些非事务性更改的表无法回滚。

经过一番研究,我发现此消息最可能的原因是错误地假设表是事务性的,但实际上不是。如何确定哪些表是事务性的?

我必须假设我正在使用的数据库使用回滚,因为它在我为要求我们使用数据库的类分配的作业中。

【问题讨论】:

    标签: mysql transactions subquery rollback savepoints


    【解决方案1】:

    使用 InnoDB 存储引擎的表,或者使用 NDB 集群存储引擎的表,支持事务;其他引擎没有。 (文档中某处有一个比较表,但我现在找不到。)

    要检查特定表,请使用

    SHOW CREATE TABLE <tablename>;
    

    它将显示完整的CREATE TABLE 语句,包括ENGINE 子句。

    要检查您的数据库中安装了哪些引擎,请使用

    SHOW ENGINES;
    

    如果您安装了 InnoDB 但它不是默认引擎,您可以在 CREATE TABLE 语句中指定 ENGINE=InnoDB 或稍后更改它

    ALTER TABLE <tablename> ENGINE = InnoDB;
    

    【讨论】:

    • 请注意,如果您的版本早于 5.5,MySQL 的默认引擎是 not InnoDB;在此处查看将 InnoDB 设置为默认引擎的一些选项:stackoverflow.com/questions/3050492/…
    • 谢谢,这帮助我弄清楚引擎是 MyISAM,这很糟糕。现在我明白了。
    • 哦,顺便说一句,您的解决方案非常好。当然,这两种解决方案都很高兴知道。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多