数据库基本知识2
目录
为保证数据库是可恢复的,登记日志文件时
- 为保证数据库是可恢复的,登记日志文件时必须遵循两条原则:
1. 登记的次序严格按并发事务执行的时间次序。
2.必须先写日志文件,后写数据库。
把对数据的修改写到数据库中和把写表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。如果先写了数据库修改,而在运行记录中没有登记下这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,按日志文件恢复时只不过是多执行一次不必要的UNDO操作,并不会影响数据库的正确性。所以为了安全,一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。这就是“先写日志文件”的原则。
排他锁
在第一个事务以S 封锁方式读数据A 时,第二个事务对数据A 的读方式会遭到失败的是_A_.
A .实现X 封锁的读 B . 实现S 封锁的读C .不加封锁的读 D .实现共享型封锁的读
在第一个事务以共享锁方式读数据A时,第二个事务对数据A的读方式会遭到失效的是实现排他锁的读
不允许任何其他事务对这个锁定目标再加任何类型锁的锁是排他锁。
并发操作带来的数据不一致性
事务的ACID特性:原子性,一致性,隔离性,持久性。
事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一就是多个事务对数据库的并发操作造成的。
并发操作带来的数据不一致性主要有丢失修改,不可重复读,读“脏”数据。
1、丢失修改
两个事务T1和T2读入同一个数据并修改,T2提交的结果破坏了T1提交的结果,导致了T1的修改被丢失。典型例子:买飞机票或者火车票的例子。
2、不可重复读
不可重复读指的是事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取的结果。
分为以下三种情况:
(1)事务T1读取了某一数据后,事务T2对其做了修改,当事务T1再次读数据时,得到了与前一次不同的值。
(2)事务T1读取了某一数据后,事务T2删除了其中的记录,当事务T1再次读数据时,发现某些记录神秘消失了。
(3)事务T1读取了某一数据后,事务T2插入了一些新的记录,当事务T1再次读数据时,发现多了一些记录。
后两种操作叫做幻影现象。
3、读“脏”数据
读“脏”数据只得是事务T1修改了某一数据,并将其写回磁盘,事务T2读取某一数据后,T1由于某种原因撤销了操作,恢复原值,这时T2读到的数据就和数据库中的数据不一致,称为读“脏”数据。
产生以上三种现象的原因是并发操作破坏了事务的隔离性。为了应对这些数据不一致性,主要技术主要有:封锁,时间戳,乐观控制法。
两读之间的增删改操作是不可重复读,两读之后的一前一后修改是丢失修改,有回滚的一定是读“脏”数据。
例题:
1、设有两个事务Tl 、T2 ,其并发操作如图所示,下列评价正确的是 B .
A .不存在问题 B .丢失修改C .不能重复读 D .读“脏”数据
T1 | T2 |
① 读A = 10 ② ③ A = A - 5 写回 ④ | 读A = 10 A = A - 8 写回 |
2、设有两个事务Tl 、T2 ,其并发操作如图所示,下列评价正确的是 B .
A .该操作不存在问题 B .该操作丢失修改
C .该操作不能重复读 D .该操作读“脏”数据
T1 | T2 |
① 读X=48 ② ③ X=X+10 写回 ④ | 读X=48 X=X-2 写回 |
3、设有两个事务Tl 、T2 ,其并发操作如图所示,下列评价正确的是 C .
A .不存在问题B .丢失修改C .不能重复读D .读“脏”数据
T1 | T2 |
① 读A=10,B=5 ② ③ ④ 读A=20,B=5 ⑤ 求和25验证错 | 读A=10 A=A*2 写回 |
4、设有两个事务Tl 、T2 ,其并发操作如图所示,下列评价正确的是 D .
A .该操作不存在问题B .该操作丢失修改C .该操作不能重复读 D .读“脏”数据
T1 | T2 |
① 读A=100 ② A=A*2 写回 ③ ④ ROLLBACK 恢复A=100 | 读A=200 |
数据模型的三要素
数据模型的三要素是数据结构、数据操作和数据约束。数据模型是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表示与操作提供一个抽象的框架。
数据独立性
数据的独立性是数据库系统的基本的特征之一 。数据独立性是指应用程序和数据结构之间相互独立, 互不影响。
在三层模式体系结构中数据独立性是指数据库系统在某一层次模式上的改变不会使它的上一层模式也发生改变的能力。
正是三级模式间的两层映像保证了数据库系统中的数据具有较高的数据独立性。
数据独立性包括数据逻辑独立性和数据物理独立性。
数据独立性也是数据库系统的一个最重要的目标之一。它能使数据独立于应用程序。
数据与程序的独立,把数据的定义从程序中分离出去,加上数据的存取又由DBMS负责,从而简化了应用程序的编制,大大减少了应用程序的维护和修改。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!