MySQL的事务及回滚简述

何为事务

 事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败。 MySQL数据库的事务默认是自动提交的, 也就是发一条 sql 它就执行一条。如果想多条 sql 放在一个事务中执行,则需要使用事务进行处理。当我们开启一个事务,并且没有提交,mysql 会自动回滚事务。或者我们使用 rollback 命令手动回滚事务。

何为回滚

 回滚的意思是如果之前是插入操作,那么会执行删除插入的记录,如果之前是update操作,也会执行update操作将之前的记录还原。在MySQL中,存储引擎为InnoDB的可以支持事务回滚,而MyISAM存储类型不支持。(可使用“ALTER TABLE 表名 ENGINE = InnoDB”sql语句修改);

事务处理操作

  • 1、用START TRANSACTION/BEGIN,ROOLBACK,COMMIT来实现

 START TRANSACTION/BEGIN用来开始一个事务;
 ROOLBACK用于事务失败后进行手动回滚;
 COMMIT用于事务确认及提交;

  • 2、直接用set来改变MySQL的自动提交模式

 MySQL默认是自动提交事务的,也就是我们提交一个query,它就直接执行!因此,我们可以通过以下命令来实现事务的处理
 set autocommit = 0 禁止自动提交;
 set autocommit = 1 开启自动提交;

 当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!

  • 3、保存点

 通过保存点机制:用户可以在事物里用savepoint name命令设置一些保存点,以后用户在使用rollback to savepoint name结束事物时,name之前的数据保存,之后的数据不保存

保存点注意

1、只能取消到某个保存点 rollback to savepoint p1;
2、不能提交某个保存 commit to savepoint p2//错误写法
3、最后commit 把未取消的保存点提交到数据

事务处理

热评文章