MySQL:START 事务 - 更新 - 回滚:非事务表
MySQL:START TRANSACTION - UPDATE - ROLLBACK : Non-Transactional Tables
我正在尝试 运行 这些查询来执行回滚,我不太确定我做错了什么,但我收到警告:
Some non-transactional changed tables couldn't be rolled back.
经过一些研究,我发现导致此消息的最可能原因是 table 是事务性的错误假设,但实际上不是。如何确定哪些 table 是事务性的?
我必须假设我正在使用的数据库使用回滚,因为它在我为 class 分配的任务中,要求我们使用数据库。
使用InnoDB存储引擎的表,或者使用NDB集群存储引擎的表,支持事务;其他引擎没有。 (文档中某处有比较 table,但我现在找不到。)
要检查特定的 table,请使用
SHOW CREATE TABLE <tablename>;
它将向您显示完整的 CREATE TABLE
语句,包括 ENGINE
子句。
要检查数据库中安装了哪些引擎,请使用
SHOW ENGINES;
如果您安装了 InnoDB 但它不是默认引擎,您可以在 CREATE TABLE
语句中指定 ENGINE=InnoDB
或稍后将其更改为
ALTER TABLE <tablename> ENGINE = InnoDB;
我正在尝试 运行 这些查询来执行回滚,我不太确定我做错了什么,但我收到警告:
Some non-transactional changed tables couldn't be rolled back.
经过一些研究,我发现导致此消息的最可能原因是 table 是事务性的错误假设,但实际上不是。如何确定哪些 table 是事务性的?
我必须假设我正在使用的数据库使用回滚,因为它在我为 class 分配的任务中,要求我们使用数据库。
使用InnoDB存储引擎的表,或者使用NDB集群存储引擎的表,支持事务;其他引擎没有。 (文档中某处有比较 table,但我现在找不到。)
要检查特定的 table,请使用
SHOW CREATE TABLE <tablename>;
它将向您显示完整的 CREATE TABLE
语句,包括 ENGINE
子句。
要检查数据库中安装了哪些引擎,请使用
SHOW ENGINES;
如果您安装了 InnoDB 但它不是默认引擎,您可以在 CREATE TABLE
语句中指定 ENGINE=InnoDB
或稍后将其更改为
ALTER TABLE <tablename> ENGINE = InnoDB;