数据库系统概念 第十四章 事务
构成单一逻辑工作单元的操作集合称作事务
事务概念:
原子性:要么全部正确反映出来,要么完全不反映
隔离性:每个事务都感觉不到系统中有其他事务在并发地执行
持久性:改变是永久的
一致性:如果一个事务作为原子从一个一致的数据库状态开始独立运行,则事务结束时数据库也必须再次是一致的
事务原子性和持久性
事务必须处于以下状态之一:
活动的:初始状态,事务执行时处于这个状态
部分提交的:最后一条语句执行后
失败的:发现正常的执行不能继续后
中止的:事务回滚并且数据库已恢复到事务开始执行前的状态后
提交的:成功完成后
事务隔离性:
允许并发地理由:
1 提高吞吐量和资源利用率
2 减少等待时间
调度应该在某种意义上等价于一个串行调度,这种调度称为可串行化调度
可串行化
事务隔离性和原子性:
可恢复调度:
对于每对事务i和j,如果j读取了之前由i所写的数据项,则i先于j提交
无级联调度:
单个事务故障导致一系列事务回滚的现象称为级联回滚
对调度加以限制,避免级联回滚发生,这样的调度称为无级联调度
无级联调度应满足:对于每对事务i和j,如果j读取了i所写的数据项,则i必须在j这一读操作前提交
每一个无级联调度也都是可恢复调度
事务隔离性级别:
SQL规定的隔离性级别如下:
1 可串行化:保证可串行化调度
2 可重复读:只允许读取已提交数据,而且在一个事务两次读取一个数据项期间,其他事务不能更新该数据
3 已提交读:只允许读取已提交数据,但不要求可重复读
4 未提交读:允许读取未提交数据,这是SQL允许的最低一致性级别
以上隔离级别都不允许脏写,即如果一个数据项已经被另外一个尚未提交或中止的事务写入,则不允许对该数据项执行写操作
许多数据库系统运行时的默认隔离性级别是已提交读
隔离性级别的实现:
锁:
共享锁:用于事务读的数据项
排他锁:用于事务写的数据项
许多事务可以同时持有一个数据项上的共享锁,但是只有当其他事务在一个数据项上不持有任何锁(共享或排他)时,才允许持有该数据项上的排他锁
时间戳:
为每个事务分配一个时间戳,通常是当它开始的时候
对于每个数据项,系统维护两个时间戳,数据项的读时间戳记录读该数据项的事务的最大(最近的)时间戳
数据项的写时间戳记录写入该数据项当前值的事务的时间戳。
时间戳用来确保在访问冲突情况下,事务按照事务时间戳的顺序来访问数据项
多版本和快照隔离
事务的SQL语句表示:

浙公网安备 33010602011771号