数据库 SQL TCL 事务

事务处理

  • 不能回退 SELECT 语句,回退 SELECT 语句也没意义;也不能回退 CREATE 和 DROP 语句。
  • MySQL 默认是隐式提交,每执行一条语句就把这条语句当成一个事务然后进行提交。当出现 START TRANSACTION 语句时,会关闭隐式提交;当 COMMITROLLBACK 语句执行后,事务会自动关闭,重新恢复隐式提交。
  • 通过 set autocommit=0 可以取消自动提交,直到 set autocommit=1 才会提交;autocommit 标记是针对每个连接而不是针对服务器的。
  • 指令
    • START TRANSACTION - 指令用于标记事务的起始点。
    • SAVEPOINT - 指令用于创建保留点。
    • ROLLBACK TO - 指令用于回滚到指定的保留点;如果没有设置保留点,则回退到 START TRANSACTION 语句处。
    • COMMIT - 提交事务。
      1. -- 开始事务
      2. START TRANSACTION;
      3. -- 插入操作 A
      4. INSERT INTO `user`
      5. VALUES (1, 'root1', 'root1', 'xxxx@163.com');
      6. -- 创建保留点 updateA
      7. SAVEPOINT updateA;
      8. -- 插入操作 B
      9. INSERT INTO `user`
      10. VALUES (2, 'root2', 'root2', 'xxxx@163.com');
      11. -- 回滚到保留点 updateA
      12. ROLLBACK TO updateA;
      13. -- 提交事务,只有操作 A 生效
      14. COMMIT;