在mysql中使用事务执行脚本

时间:2012-03-28 23:48:52

标签: mysql stored-procedures transactions

我有一个存储过程来获取输入脚本和升级表。它还会写入包含更新历史记录的表。我用交易把它们包起来了。

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中的更改。

我很想知道为什么,任何人都可以提供帮助。感谢很多。

1 个答案:

答案 0 :(得分:4)

这是因为'ALTER TABLE'是一个DDL语句,无法回滚并隐式结束事务。

更多信息 -