手动提交事务

START TRANSACTION; // BEGIN TRANSACTION;
// ......
COMMIT;    // 提交事务
ROLLBACK;  // 回滚事务

回滚点

  • 设置回滚点  SAVEPOINT 名字
  • 回到回滚点  ROLLBACK TO 名字
  • RELEASE SAVEPOINT  明确地释放保留点。

START TRANSACTION  语句相较于  BEGIN  特别之处在于,后边能跟随几个修饰符:
① READ ONLY :标识当前事务是一个只读事务,也就是属于该事务的数据库操作只能读取数据,而不能修改数据。
② READ WRITE :标识当前事务是一个读写事务,也就是属于该事务的数据库操作既可以读取数据,也可以修改数据。
③ WITH CONSISTENT SNAPSHOT :立刻启动一致性读。使用  START TRANSACTION  语句后,并非立刻开启事务,而是在第一条语句执行前再开启。但是可以配置该修饰符立刻开启事务,分配一个事务 ID。

自动提交事务

  • MySQL 默认为每一条 DML(增删改) 语句自动开启一个事务、自动提交事务。
  • SELECT @@autocommit;  其中, @@  表示全局变量,1 表示开启,0 表示关闭。
  • SET @@autocommit = 0;  关闭自动提交事务,之后必须  commit;  才会提交任务并更新数据库。

隐式提交事务

  1. 当一个事务还没有  commit  或者  rollback ,又开启新事务时,则隐式提交上一个事务。
  2. 当  autocommit  为  0,手动将其更改为  1  时,隐式提交上一个事务。
  3. 使用  LOCK TABLES 、 UNLOCK TABLES  等关于锁定的语句也会隐式的提交上一个事务。