解决MySQL事务失败的回滚技巧(mysql失败回滚)
在MySQL事务失败的时候,如何回滚发生的变化,是非常重要的,尤其是在多会话或者设置了外键约束的情况下,可能会导致保证数据完整性的操作出现问题。MySQL 存储引擎在处理事务方面,提供了两个技巧来避免这种情况,即 SAVEPOINT 和 ROLLBACK 。
关于 SAVEPOINT ,我们可以在一个事务中,创建几个不同 savepoint 的名字,可以让使用者来提前预测和预防事务失败的情景:
例如:
“`sql
START TRANSACTION;
— 以下是第一次操作
SAVEPOINT my_save_1;
DELETE FROM my_table WHERE . . . ;
— 假如出现事务失败,我们可以做回滚:
ROLLBACK TO SAVEPOINT my_save _1;
— 以下是第二次操作
SAVEPOINT my_save_2;
UPDATE my_table SET . . . ;
如果第一次操作失败,我们可以使用 ROLLBACK 语句来回滚到执行 SAVEPOINT my_save_1 之前的状态。
另一种技巧是 SET AUTOCOMMIT 。当 AUTOCOMMIT 为1的时候,可以保证每一条SQL语句都会被成功执行。但是如果在某条SQL语句执行失败的情况下,进而导致整个sql语句的失败,整体的事务也失败了,在这种情况下,我们也可以通过使用 ROLLBACK 语句来进行事务回滚。
例如:
```sqlSET AUTOCOMMIT=1;
DELETE FROM my_table WHERE . . .
UPDATE my_table SET . . .
-- 假如第2条 SQL 出现问题,我们可以 ROLLBACK :ROLLBACK;
总之,当MySQL事务失败的时候,我们可以使用SAVEPOINT和SET AUTOCOMMIT这两种回滚技巧,通过ROLLACK语句来恢复之前事务状态,从而避免主外键关系约束等数据完整性受到破坏。