事务

5/14/2022 Mysql

摘要

Mysql Version:5.7.36
官方文档:https://dev.mysql.com/doc/refman/ (opens new window)
样例表:下载

# 一:前言

MyISAM 不支持事务,InnoDB 支持事务

利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态。

# 二:控制事务处理

管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。

  • START TRANSACTION:标识事务的开始
  • COMMIT:提交
  • ROLLBACK:回滚(INSERT、UPDATE、DELETE)、不能回滚 CREATE 或 DROP 操作,可以使用,但是执行回滚并不会真正回滚。
  • SAVEPOINT:设置保留点

回滚

START TRANSACTION;
DELETE FROM ordertotals;
SELECT count(1) FROM ordertotals;
ROLLBACK;
1
2
3
4

提交

START TRANSACTION;
DELETE FROM ordertotals WHERE order_num = 20010;
DELETE FROM ordertotals WHERE order_num = 20012;
COMMIT;
1
2
3
4

如果其中一条语句失败,自动回滚

保留点

为了支持回退部分事务处理,必须在事务处理块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符。

SAVEPOINT delete1;
1

回滚时可用:

ROLLBACK TO delete1;
1

修改默认提交

默认的MySQL行为是自动提交,事务特别,需要手动填写 commit,如果想 MySQL关闭所有自动修改,可以修改如下设置:

SET autocommit = 0;
1

# 三:参考文献

最后更新: 5/14/2022, 4:46:53 PM