MySQL中ROLLBACK命令无法生效?求问题原因解析
问题原因分析
导致ROLLBACK未生效的常见原因有以下几种:
1. 数据库开启了自动提交(AUTOCOMMIT)模式
多数关系型数据库(如MySQL)默认开启自动提交,每执行一条DML(INSERT/UPDATE/DELETE)语句后会自动提交事务。这种情况下:
- 执行
INSERT语句后,事务已自动提交,数据永久写入数据库; - 执行
DELETE语句后,该操作也被自动提交; - 最后执行
ROLLBACK时,没有未提交的事务可以回滚,自然看不到数据恢复。
你可以通过以下命令查看当前自动提交状态:
SELECT @@AUTOCOMMIT;
返回1表示开启自动提交,返回0表示关闭。
2. 表的存储引擎不支持事务
如果employees表使用的是不支持事务的存储引擎(比如MySQL的MyISAM、MEMORY),所有DML操作都会即时生效且无法回滚。只有InnoDB、PostgreSQL默认引擎这类支持事务的引擎,才能配合ROLLBACK实现事务回滚。
可以通过以下语句查看表的存储引擎:
SHOW CREATE TABLE employees;
在结果中找到ENGINE=后的字段即可确认。
3. 事务已被显式提交
如果在INSERT或DELETE操作后执行过COMMIT命令,对应的事务已经被永久提交,后续的ROLLBACK无法撤销已提交的操作。
内容的提问来源于stack exchange,提问作者nguyencuc2386
相关产品推荐
相关产品推荐

