构成单一逻辑工作单元的操作集合称作事务(transaction)。
即使有故障,数据库系统也必须保证事务的正确执行--要么执行整个事务,要么属于该事务的操作一个也不执行。
1. 事务概念
事务通常由高级数据操纵语言或编程语言通过JDBC或ODBC嵌入式数据库访问书写的用户程序的执行所引起。
四大特性:原子性、隔离性、一致性、持久性
原子性:如果一个事务开始执行,但是由于某些原因失败,则事务对数据库造成的任何可能的修改都要撤销。无论事务本身是否失败,或者操作系统崩溃,或者计算机停止运行,这项操作都要成立。
隔离性:数据库系统必须采取特殊处理来确保事务正常执行而不被来自并发执行的数据库语句所干扰。
持久性:即使系统崩溃后事务的操作也必须是永久的。
一致性:隔离执行事务时保持数据库的一致性。
ACID特性:Atomicity, Consistency, Isolation, Durability
2. 一个简单的实物模型
3. 存储结构
易失性存储器:易失性存储器中的信息通常在系统崩溃后不会幸存。这种存储器的例子包括主存储器和高速缓冲存储器。易失性存储器的访问非常快,一方面是因为内存访问本身的速度,另一方面是因为可以直接访问易失性存储器中的任何数据项。
非易失性存储器:非易失性存储器会在系统崩溃后幸存。非易失性存储器的例子包括用于在线存储的二级存储设备(如磁盘和闪存),以及用于存档存储的三级存储设备(如光介质和磁带)。
稳定性存储器:永远不会丢失。
4. 事务原子性和持久性
事务的状态:
活动的(active):初始状态,事务执行时处于这个状态。
部分提交的(partially committed):最后一条语句执行后。
失败的(failed):发现正常的执行不能继续后。
中止的(aborted):事务回滚并且数据库已恢复到事务开始执行前的状态后。
提交的(committed):成功完成后。
5. 事务隔离性
6. 可串行化
7. 事务隔离性和原子性
7.1 可恢复调度
可恢复性调度满足:对于每队事务Ti和Tj,如果Tj读取了之前有Ti所写的数据项,则Ti先于Tj提交。
7.2 无级联调度
无级联调度满足:对于每队事务Ti和Tj,如果Tj读取了先前由Ti所写的数据项,则Ti必须在Tj这一读操作前提交。
8. 事务隔离级别
9. 隔离级别的实现
9.1 锁
两阶段封锁协议:一阶段只获取锁不释放锁;另一阶段只释放锁不获取锁。
共享锁:许多事务可以同时持有一个数据项的共享锁
排它锁:只有其他事务在一个数据项上没有持有锁(无论共享锁还是排它锁)时,一个事务才允许获取排它锁。
9.2 时间戳
对于同一个数据项,系统持有两个时间戳,最大读时间戳和最大写时间戳。
当不可能访问时,违例事务将会中止,并会被分配给一个最新的时间戳重新开始。
9.3 多版本和快照隔离
每个事务开始时持有其自身数据库版本的副本,事务从这个私有数据库版本中读取数据,因此和其他数据库操作隔离开,更新只出现在私有数据库操作中而不会影响实际数据库。当事务提交时,和更新有关的信息会保存,被写会真正的数据库中。