摘要
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
2
3
4
提交
START TRANSACTION;
DELETE FROM ordertotals WHERE order_num = 20010;
DELETE FROM ordertotals WHERE order_num = 20012;
COMMIT;
1
2
3
4
2
3
4
如果其中一条语句失败,自动回滚
保留点
为了支持回退部分事务处理,必须在事务处理块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符。
SAVEPOINT delete1;
1
回滚时可用:
ROLLBACK TO delete1;
1
修改默认提交
默认的MySQL行为是自动提交,事务特别,需要手动填写 commit,如果想 MySQL关闭所有自动修改,可以修改如下设置:
SET autocommit = 0;
1
# 三:参考文献
- 《MySQL 是怎样运行的 - 小孩子4919》
- 《MySQL 必知必会 - Ben Forta著(刘晓霞、钟鸣)译》
- 官方文档 (opens new window)