《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;

上例先查询ordertotals以显示该表不为空,然后开启事务,删除所有行,再查询确实该表现在为空,然后回滚,最后的查询显示该表不为空。

对于ROLLBACK回滚来讲:
  • 只能在一个事务处理内使用
  • 管理INSERT、UPDATE、DELETE,不能回退CREATE或DROP操作

默认的MySQL行为是自动提交所有更改,也就是说,任何时候执行MySQL语句,实际上都是立即生效。可以设置不自动提交更改,手动COMMIT
  • SET autocommit=0;

最后,简单提一下,复杂的事务处理可能需要部分提交或回滚,所以
  • 在事务处理中的合适位置是可以设置保留点的 e.g. SAVEPOINT pointFlagName;
  • 回滚时给出保留点即可 e.g. ROLLBACK TO pointFlagName;
  • 保留点在事务处理完成会自动释放,也可以使用 RELEASE SAVEPOINT 明确地释放保留点


原文地址:https://www.cnblogs.com/deng-cc/p/7997937.html