- 什么是数据库并发 *** 作
- 带来的问题
- 丢失更新
- 不可重复读
- 读 ' 脏数据 '
用户程序可以一个一个地串行执行,每个时刻只有一个用户程序运行
执行对数据库的存取,其他用户程序必须等到这个用户程序结束以后方能对数据库存取
但是如果一个用户程序涉及大量数据的输入/输出交换,则数据库系统的大部分时间处于闲置状态
因此,为了充分利用数据库资源,发挥数据库共享资源的特点,应该允许多个用户并行地存取数据库
但这样就会产生多个用户程序并发存取同一数据的情况,若对并发 *** 作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性,所以数据库管理系统必须提供并发控制机制
并发控制机制的好坏是衡量一个数据库管理系统性能的重要标志之一。
当两个或多个事物读入同一数据并修改,会发生丢失更新问题
即后一个事务更新的结果被前一事务所做更新覆盖
例如:飞机订票
甲售票点(甲事务)读出某航班的机票余额A,设A=16.
乙售票点(乙事务)读出同一航班的机票余额A,也为16
甲售票点卖出一张机票,修改余额A=A-1.所以A为15,把A写回数据库.
乙售票点也卖出一张机票,修改余额A←A-1.所以A为15,把A写回数据库.
结果明明卖出两张机票,数据库中机票余额只减少1
归纳起来就是:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失
不可重复读不可重复读是指:事务T1读取数据后,事务T2执行更新 *** 作,使T1再次读取的数据和第一次读取的数据一样
例如:
T1读取B=100进行运算,T2读取同一数据B,对其进行修改后将B=200写回数据库。T1为了对读取值校对重读B,B已为200,与第一次读取值不一致
事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录神密地消失了
归纳起来就是:当两个数据读取某个数据后,另一事务执行了对该数据的更新,当前一事务再次读取该数据(希望与第一次读取的是相同的值)时,得到的数据与前一次的不一样,这是由于第一次读取数据后,事务B对其做了修改,导致再次读取数据时与第一次读取的数据不想同
读 ’ 脏数据 ’读"脏"数据是指:事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤消,这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,则T2读到的数据就为"脏"数据,即不正确的数据。
归纳起来就是:当一个事务修改某个数据后,另一事务对该数据进行了读取,由于某种原因前一事务撤销了对改数据的修改,即将修改过的数据恢复原值,那么后一事务读到的数据与数据可得不一致,称之为读脏数据
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)