《MySQL必知必会》[07] 管理事务处理
1、管理事务处理
一个或多个数据库操作(查询/更新等)组成“事务”,也就是说,事务实际上是一组按顺序执行的操作单位:
- 原子性:整个事务为整体执行,要么执行,要么不执行,不能出现执行了一半的情况
- 一致性:条件约束,如航班数据库,则“一个座位不能分配给两名不同的顾客”就是一种适当的一致性条件
- 隔离性:两个或更多事务并发执行时,作用效果必须相互独立,不能相互影响
- 持久性:事务一旦完成,即便系统出现故障,也要保证事务的结果不能丢失
事务的开始用 START TRANSACTION,提交用 COMMIT,遇到故障要回滚使用 ROLLBACK
(当COMMIT或ROLLBACK语句执行后,事务会自动关闭)
e.g.
SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;
1
SELECT * FROM ordertotals;
2
START TRANSACTION;
3
DELETE FROM ordertotals;
4
SELECT * FROM ordertotals;
5
ROLLBACK;
6
SELECT * FROM ordertotals;
上例先查询ordertotals以显示该表不为空,然后开启事务,删除所有行,再查询确实该表现在为空,然后回滚,最后的查询显示该表不为空。
对于ROLLBACK回滚来讲:
- 只能在一个事务处理内使用
- 管理INSERT、UPDATE、DELETE,不能回退CREATE或DROP操作
默认的MySQL行为是自动提交所有更改,也就是说,任何时候执行MySQL语句,实际上都是立即生效。可以设置不自动提交更改,手动COMMIT:
- SET autocommit=0;
最后,简单提一下,复杂的事务处理可能需要部分提交或回滚,所以
- 在事务处理中的合适位置是可以设置保留点的 e.g. SAVEPOINT pointFlagName;
- 回滚时给出保留点即可 e.g. ROLLBACK TO pointFlagName;
- 保留点在事务处理完成会自动释放,也可以使用 RELEASE SAVEPOINT 明确地释放保留点