对于支持Transaction的数据库而言,必须有以下特征
一、Atomicity 原子性
一个事务中的所有操作,执行情况有两种:全部完成和全部不完成。不能停滞在中间某个环节,执行过程中出现错误时,会回滚到事务开始前的状态
二、Consistency 一致性
(wikipedia):Ensures that any transaction will bring the database from one valid state to another.
定义的规则:constraints(约束),cascades(级联),triggers(触发)
所有写入数据库的数据必须满足上述规则或者规则组合(Any data written to the database must be valid according to all defined rules)
不保证应用程序需求的事务正确性,仅仅保证任何程序错误不会导致破坏规则。
(百科):一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
三、Isolation 隔离性(串行化)
提供隔离性是并发控制的主要目标。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。
四、Durability 持久性
事务完成后,其对数据库所作的更改持久的保存在数据库中,不会被回滚。
实现方式:
1.write-ahead logging
保证原子性的方法:在该表数据库前将没有更改的数据拷贝到日志中
2.shadow paging
(wiki)updates are applied to a partial copy of the database, and the new copy is activated when the transaction commits.
(百科)与1相比,不需要redo,undo,消除了写日志记录的开销,恢复速度快
缺点:事务提交时要输出多个块,提交开销大,以块为单位,很难应用到允许多个事务并发执行的情况。