程序员

《MySQL技术内幕:InnoDB存储引擎》第七章 事务

2019-02-26  本文已影响8人  半亩房顶

事务(Transaction)是数据库区别于文件系统的重要特性之一。
数据库引入事务的主要目的:事务会把数据库从一种抑制状态转换为另一种一致状态。在数据库提交工作时,要么所有修改都已经保存了,要么所有修改都不保存。
InnoDB中的事务完全符合ACID的特性

7.1 事务概述

事务用来保证数据库的完整性
原子性:事务中所有操作要么全部成功,要么全部失败
一致性:从一种状态转变为下一种一致状态。事务开始前和结束后,数据库的完整性约束没有被破坏。
隔离性:一个事务的影响在提交前对其他事务都不可见
持久性:一旦提交,结果就是永久性的。

7.2 事物的实现

隔离性由锁实现
原子性,一致性,持久性通过数据库的Redo Undo实现

7.2.1 redo

7.2.2 undo

undo存放在数据库内部的一个特殊段中,成为undo段,undo段位于共享表空间内。
undo只能逻辑上还原,并不能物理上还原

7.3 事务控制语句

7.4 隐式提交的SQL语句

以下语句会隐式提交事务


隐式提交

Microsoft SQL Server 中DDL不会隐式提交,这一点与InnoDB和Oracle不同

7.5 对于事务操作的统计

TPS计算:

(com_committed + com_rollback) / time
但是这种方法的前提是所有的事务都必须是显示提交的。如果存在饮食的提交和回滚(默认autocommit=1),不会计算到com_commit和com_rollback中

7.6 事务的隔离级别

隔离级别有四个

7.7 分布式事务

分布式事务使用两段式提交(two-phase commit)的方式。

7.8 不好的事务习惯

7.8.1 在循环中提交

循环中重复提交,或者隐式提交,都会重复写入重做日志,造成资源浪费。

7.8.2 使用自动提交

7.8.3 使用自动回滚

无法获取返回值和报错信息,所以事务的控制应该交给程序端。

上一篇 下一篇

猜你喜欢

热点阅读