我有一个存储过程来获取输入脚本和升级表。它还会写入包含更新历史记录的表。我用交易把它们包起来了。
START TRANSACTION;
PREPARE action from @upgradeScript;
EXECUTE action;
INSERT INTO database_history (version, changes)
VALUES (Version, comments);
COMMIT;
我将@upgradeScript设置为:
"ALTER TABLE t ADD column test1 varchar(45) NOT NULL;"
但是,当插入失败时,它不会回滚@upgradeScript中的更改。
我很想知道为什么,任何人都可以提供帮助。感谢很多。
答案 0 :(得分:4)
这是因为'ALTER TABLE'是一个DDL语句,无法回滚并隐式结束事务。
更多信息 -