《数据库系统概念》第14章知识点总结
事务
事务是访问并可能更新各种数据项的一个程序执行单元。事务通常由高级数据操作语言或编程语言通过JDBC或ODBC嵌入式数据库访问书写的用户程序的执行所引起。事务用形如begin transaction和end transaction语句来界定。
事务的特性
(1)原子性:事务的所有操作在数据库中要么全部正确反映出来,要么完全不反映
(2)一致性:隔离执行事务时保持数据库的一致性
(3)持久性:一个事务成功完成后,它对数据库的改变必须是永久的,即使出现系统故障
(4)隔离性:尽管多个事务可能并发执行,但系统保证,对于任何一对事务Ti和Tj,在Ti看来,Tj或者在Ti开始之前已经完成执行,或者在Ti完成之后开始执行。因此,每个事务都感觉不到系统中有其他事务在并发地执行。
一个简单的事务模型
read(X):从数据库把数据项X传送到执行read操作的事务的主存缓冲区的一个也称为X的变量中
write(X):从执行write的事务的主存缓冲区的变量X中把数据项X传回数据库中
存储结构
易失性存储器:通常信息在系统崩溃后不会幸存
非易失性存储器:信息会在系统崩溃后幸存
稳定性存储器:信息永远不会丢失
事务原子性和持久性
事务的五个状态
活动的:初始状态,事务执行时处于这个状态
部分提交的:最后一个语句执行
失败的:发现侦察和那个的执行不能继续后
中止的:事务回滚并且数据库已恢复到事务开始执行前的状态后
提交的:成功完成后
事务进入中止态时,系统的两种操作
重启事务:仅当引起事务中止的是硬件错误或不是由事务的内部逻辑所产生的软件错误。
杀死事务:这样做通常是由于事务的内部逻辑造成的错误。
并发事务的好处
提高吞吐量和资源利用率
减少等待时间
事务隔离性和原子性
可恢复调度:对于每对事务Ti和Tj,如果Tj读取了之前由Ti所写的数据项,则Ti先于Tj提交。
无级联调度:对于每对事务Ti和Tj,如果Tj读取了先前由Ti所写的数据项,则Ti必须在Tj这一读操作前提交
事务隔离性级别
可串行化:通常保证可串行化调度
可重复读:只允许读取已提交数据
已提交读:只允许读取已提交数据
未提交读:允许读取未提交数据
以上所有隔离性级别都不允许脏写,即如果一个数据项已经被另一个尚未提交或中止的事务写入,则不允许对该数据项执行写操作
隔离性级别的实现
锁
共享锁:用于事务读的数据项,S
排它锁:用于事务写的数据项,X
时间戳
多版本和快照隔离