下面介绍的优化策略能提高查询的效率,但它们不一定是最优的策略,实际上“优化”一词并不是很确切,用“改进”或“改善”或许更恰当些。即使这样,使用预处理方法执行连接的时间一般仍大大减少。当查询视图时,定义视图的表达式就是公共子表达式的情况。......
2023-11-24
在运用X锁和S锁给数据对象加锁时,还需要约定一些规则,例如,何时申请X锁或S锁、持锁时间、何时释放锁等。称这些规则为封锁协议或加锁协议。对封锁方式制定不同的规则,就形成了各种不同级别的封锁协议。不同级别的封锁协议所能达到的系统一致性级别是不同的。
1.一级封锁协议
一级封锁协议:对事务T要修改的数据加X锁,直到事务结束(包括正常结束和非正常结束)时才释放。
一级封锁协议可以防止丢失修改,并保证事务T是可恢复的,如图7-8所示。在图7-8中,事务T1要对A进行修改,因此,它在读A之前先对A加了X锁;当T2要对A进行修改时,它也申请对A加X锁,但由于A已经被加了X锁,因此T2申请对A加X锁的请求被拒绝,T2只能等待,直到T1释放了对A加的X锁为止。当T2能够读取A时,它所得到的已经是T1更改后的值了。因此,一级封锁协议可以防止丢失修改。
图7—8 没有丢失修改
在一级封锁协议中,如果事务丁只是读数据而不对其进行修改,则无须加锁。因此,不能保证可重复读和不读“脏”数据。
2.二级封锁协议
二级封锁协议:一级封锁协议加上事务T对要读取的数据加S锁,读完后即释放S锁。
二级封锁协议除了可以防止丢失修改外,还可以防止读“脏”数据。如图7-9所示为使用二级封锁协议防止读“脏”数据的情况。
在图7-9中,事务T1要对B进行修改,因此,先对B加了X锁,修改完后将值写回数据库。这时T2要读B的值,因此,申请对B加S锁,由于T1已在B上加了X锁,因此T2只能等待。当T1由于某种原因撤销了它所做的操作时,B恢复为原来的值50,然后T1释放对B加的X锁,因而T2获得了对B的S锁。当T2能够读B时,B的值仍然是原来的值,即T2读到的是50。因此避免了读“脏”数据。
(www.chuimin.cn)
图7—9 二级封锁协议下不读“脏”数据
在二级封锁协议中,由于事务T读完数据即释放S锁,因此,不能保证可重复读数据。
3.三级封锁协议
三级封锁协议:一级封锁协议加上事务T对要读取的数据加S锁,并直到事务结束才释放。
三级封锁协议除了可以防止丢失修改和不读“脏”数据之外,还进一步防止了不可重复读。如图7-10所示为使用三级封锁协议防止不可重复读的情况。
图7—10 三个封锁协议下可重复读
在图7-10中,事务T1要读取A、B的值,因此先对A、B加S锁,这样其他事务只能再对A、B加S锁,而不能加X锁,即其他事务只能对A、B进行读取操作,而不能进行修改操作。因此,当T2为修改B而申请对B加X锁时被拒绝,T2只能等待。T1为验算再读A、B的值,这时读出的值仍然是A、B原来的值,因此求和的结果也不会变,即可重复读。直到T1释放了在A、B上加的锁,T2才能获得对B的X锁。
三个封锁协议的主要区别在于读操作是否需要申请封锁,以及何时释放锁。三个级别的封锁协议的总结如表7-2所示。
表7—2 不同级别的封锁协议
有关数据库技术与应用教程的文章
下面介绍的优化策略能提高查询的效率,但它们不一定是最优的策略,实际上“优化”一词并不是很确切,用“改进”或“改善”或许更恰当些。即使这样,使用预处理方法执行连接的时间一般仍大大减少。当查询视图时,定义视图的表达式就是公共子表达式的情况。......
2023-11-24
两个关系表达式E1和E2是等价的,可记作E1≡E2。常用的等价变换规则有以下几种。,Bm是E2的属性,则:10.投影与并的交换若E1和E2为可比属性,则有......
2023-11-24
从1.1.1节的介绍可以看到,在数据库管理系统出现之前,人们对数据的操作是直接针对数据文件编写应用程序实现的,这种模式会产生很多问题。对于1.1.1小节中列举的学生基本信息管理和学生选课管理两个子系统,如果使用数据库技术来管理,其实现方式如图1-4所示。保证数据的安全是通过数据库管理系统的安全控制机制实现的,保证数据的可靠是通过数据库管理系统的备份和恢复机制实现的。......
2023-11-24
如果要使用缺省参数创建一个学籍管理数据库StuData,可以使用如下命令:Create Database StuData如果希望为数据库或事务日志指定一个或者多个特定文件,增加一个On Primary子句,列出一个或者多个文件,并可为分配这个文件的空间指定一个可选值,其命令形式如下:Create Database StuDataOn Primary,;如果为了提高性能和可恢复性,则可以使用Log On子句来指定数据库的SQL Server事务日志将存储在一个与数据库对象不同的设备上,示例如下:Create Database StuDataOn Primary,Log On;GO......
2023-11-24
关键字Modify File用以表示按后面的文件说明,在指定的数据库中修改相应数据库文件。下面的语句可在学籍管理数据库增加一个新数据库文件,同时要修改原数据库文件StuFile l的最大文件尺寸为2000 MB。Alter Database StuDataAdd FileModify File又如,如果要删除学籍管理数据库文件StuFile2,则可使用如下命令:Alter Database StuDataRemove File StuFile2......
2023-11-24
虽然对视图的操作最终都转换为对基本表的操作,视图看起来似乎没什么用处,但实际上,如果合理地使用视图会带来许多好处。定义视图可以将表与表之间复杂的连接操作和搜索条件对用户隐藏起来,用户只需简单地查询一个视图即可。这在多次执行相同的数据查询操作时尤为有用。......
2023-11-24
SQL的数据查询语句中包括SELECT,FROM,WHERE,GROUP BY和ORDER BY子句。SELECT语句具有数据查询、统计、分组和排序的功能,其语句表达能力非常强大。查询操作需要的数据源指基本表组,表间用“,”分割。当SELECT子句后的目标列中有统计函数,如果查询语句中有分组子句,则统计为分组统计,否则为对整个结果集统计。交查询操作,操作结果为取<查询1>和<查询2>共有的元组。......
2023-11-24
相关推荐