回滚在MySQL中不起作用

时间:2015-12-02 10:12:17

标签: mysql sql

我默认使用InnoDb引擎。这看起来很奇怪:

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> set session transaction isolation level serializable;
Query OK, 0 rows affected (0.00 sec)

mysql> create table test_1(id int);
Query OK, 0 rows affected (0.07 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_reestr |
+------------------+
| test_1          |
+------------------+
1 rows in set (0.00 sec)

看起来很奇怪,因为我开始交易并回滚,但无济于事。那么,我做错了什么?

1 个答案:

答案 0 :(得分:2)

扩展上面的注释:在MySQL中,基本上所有改变数据库对象的操作都会执行自动提交。主要类别是:

  1. 您对象上的任何DDL,例如CREATE/ALTER/DROP TABLE/VIEW/INDEX ...,
  2. 修改系统数据库mysql的任何内容,例如ALTER/CREATE USER
  3. 任何管理命令,例如ANALYZE
  4. 任何数据加载/复制语句。
  5. 实际上,我认为最好假设INSERTUPDATEDELETE是安全的,而其他任何东西都不是。

    来源:https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html