【发布时间】:2018-09-21 23:54:59
【问题描述】:
我想知道如果任何插入/更新发生错误,以下sql语句是否会在开始事务之前自动回滚到状态。或者我是否需要在开始事务之前手动回滚到初始状态?如果需要手动回滚,应该怎么做?
START TRANSACTION;
INSERT INTO TABLE 1 ...
UPDATE TABLE 1 ...
UPDATE TABLE 2 ...
INSERT TABLE 3 ...
COMMIT;
【问题讨论】:
我想知道如果任何插入/更新发生错误,以下sql语句是否会在开始事务之前自动回滚到状态。或者我是否需要在开始事务之前手动回滚到初始状态?如果需要手动回滚,应该怎么做?
START TRANSACTION;
INSERT INTO TABLE 1 ...
UPDATE TABLE 1 ...
UPDATE TABLE 2 ...
INSERT TABLE 3 ...
COMMIT;
【问题讨论】:
您可以使用ROLLBACK; 回滚 MySQL 事务。自动回滚取决于您使用的客户端。如果您使用的是 MySql 命令行客户端,它会在发生错误时触发退出,这将回滚任何待处理的事务。但是,某些客户端可能不会在返回错误时自动触发回滚,让您按照您认为合适的方式处理错误。您可以在official documentation 上查看有关事务如何工作的更多信息,包括它们的各种选项和细微差别。
编辑:使用this other question 中的答案中的信息更新了有关自动回滚的答案。
【讨论】: