5

(MySQL 5.5、InnoDB テーブル) セーブポイントまたは前のbeginステートメントにロールバックできないのはなぜですか?

mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)

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

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

mysql> alter table sg_Section add column (published tinyint(1) default 0);
Query OK, 2 rows affected (0.30 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> rollback to savepoint id;
ERROR 1305 (42000): SAVEPOINT id does not exist

セーブポイントの後にコマンドを実行しないと、«動作»しているように見えます:

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

mysql> rollback to savepoint id;
Query OK, 0 rows affected (0.00 sec)
4

1 に答える 1

10

DDL は MySQL ではトランザクション対応ではありません。

DDL ステートメントは、開いているトランザクションを暗黙的にコミットします。

マニュアルの詳細: http://dev.mysql.com/doc/refman/5.5/en/implicit-commit.html

于 2012-11-18T10:07:51.393 に答える