MySQL 成功时导入 sqldump 失败时回滚
MySQL import sqldump on success rollback on failure
我有几个 SQL 脚本(更改 table、创建 table、插入数据、更新等)。
我把它包装成一个交易
SET AUTOCOMMIT = 0;
START TRANSACTION;
//code create, alter, insert...
COMMIT
我认为它只会在成功时处理代码。但是即使失败我也修改了tables。所以我必须再次将数据库恢复到 运行 脚本。
我尝试用 COMMIT
代替 ROLLBACK
。但是没有用。
有没有办法只在成功时获取更改?
尝试处理错误以在失败时回滚:
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
SET @error = 1;
SET @error_string = 'erreur de type NOT FOUND';
END;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SET @error = 1;
SET @error_string = 'erreur de type SQLEXCEPTION';
END;
SET @error = 0;
SET @error_string = '';
-- start transact
START TRANSACTION;
//code ...
IF (@error <> 0) THEN
ROLLBACK;
//LEAVE MAj_DOC;
ELSE
commit;
END IF;
END
我发现这是不可能的。
http://dev.mysql.com/doc/refman/5.7/en/cannot-roll-back.html
我有几个 SQL 脚本(更改 table、创建 table、插入数据、更新等)。
我把它包装成一个交易
SET AUTOCOMMIT = 0;
START TRANSACTION;
//code create, alter, insert...
COMMIT
我认为它只会在成功时处理代码。但是即使失败我也修改了tables。所以我必须再次将数据库恢复到 运行 脚本。
我尝试用 COMMIT
代替 ROLLBACK
。但是没有用。
有没有办法只在成功时获取更改?
尝试处理错误以在失败时回滚:
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
SET @error = 1;
SET @error_string = 'erreur de type NOT FOUND';
END;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SET @error = 1;
SET @error_string = 'erreur de type SQLEXCEPTION';
END;
SET @error = 0;
SET @error_string = '';
-- start transact
START TRANSACTION;
//code ...
IF (@error <> 0) THEN
ROLLBACK;
//LEAVE MAj_DOC;
ELSE
commit;
END IF;
END
我发现这是不可能的。 http://dev.mysql.com/doc/refman/5.7/en/cannot-roll-back.html