数据库系统概念 第十四章 事务

构成单一逻辑工作单元的操作集合称作事务

 

 

 

事务概念:

  原子性:要么全部正确反映出来,要么完全不反映

  隔离性:每个事务都感觉不到系统中有其他事务在并发地执行

  持久性:改变是永久的

  一致性:如果一个事务作为原子从一个一致的数据库状态开始独立运行,则事务结束时数据库也必须再次是一致的

 

 

 

事务原子性和持久性

  事务必须处于以下状态之一:

    活动的:初始状态,事务执行时处于这个状态

    部分提交的:最后一条语句执行后

    失败的:发现正常的执行不能继续后

    中止的:事务回滚并且数据库已恢复到事务开始执行前的状态后

    提交的:成功完成后

 

 

 

事务隔离性:

  允许并发地理由:

    1 提高吞吐量和资源利用率

    2 减少等待时间

  调度应该在某种意义上等价于一个串行调度,这种调度称为可串行化调度

 

 

 

 

可串行化

 

 

 

事务隔离性和原子性:

  可恢复调度:

    对于每对事务i和j,如果j读取了之前由i所写的数据项,则i先于j提交

  无级联调度:

    单个事务故障导致一系列事务回滚的现象称为级联回滚

    对调度加以限制,避免级联回滚发生,这样的调度称为无级联调度

    无级联调度应满足:对于每对事务i和j,如果j读取了i所写的数据项,则i必须在j这一读操作前提交

    每一个无级联调度也都是可恢复调度

 

 

 

 

事务隔离性级别:

  SQL规定的隔离性级别如下:

    1 可串行化:保证可串行化调度

    2 可重复读:只允许读取已提交数据,而且在一个事务两次读取一个数据项期间,其他事务不能更新该数据

    3 已提交读:只允许读取已提交数据,但不要求可重复读

    4 未提交读:允许读取未提交数据,这是SQL允许的最低一致性级别

  以上隔离级别都不允许脏写,即如果一个数据项已经被另外一个尚未提交或中止的事务写入,则不允许对该数据项执行写操作

  许多数据库系统运行时的默认隔离性级别是已提交读

 

 

 

 

隔离性级别的实现:

  锁:

    共享锁:用于事务读的数据项

    排他锁:用于事务写的数据项

    许多事务可以同时持有一个数据项上的共享锁,但是只有当其他事务在一个数据项上不持有任何锁(共享或排他)时,才允许持有该数据项上的排他锁

  时间戳:

    为每个事务分配一个时间戳,通常是当它开始的时候

    对于每个数据项,系统维护两个时间戳,数据项的读时间戳记录读该数据项的事务的最大(最近的)时间戳

    数据项的写时间戳记录写入该数据项当前值的事务的时间戳。

    时间戳用来确保在访问冲突情况下,事务按照事务时间戳的顺序来访问数据项

  多版本和快照隔离

    

 

 

 

事务的SQL语句表示:

 

posted @ 2013-10-27 14:48  褐色键盘  阅读(330)  评论(0)    收藏  举报