精华内容
下载资源
问答
  • 并发操作带来的数据不一致性有:丢失修改,不可重复读,脏读。 1. 丢失修改 两个事务T1和T2读入同一个数据并修改,T2提交的结果破坏了T1提交的结果,导致了T1的修改被丢失。典型例子:买飞机票或者火车票的例子。 ...

    事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务,而事务ACID特性可能遭到破坏的原因之一就是多个事务对数据库的并发操作造成的。

    并发操作带来的数据不一致性有:丢失修改,不可重复读,脏读

    1. 丢失修改

    两个事务T1和T2读入同一个数据并修改,T2提交的结果破坏了T1提交的结果,导致了T1的修改被丢失。典型例子:买飞机票或者火车票的例子。


    2. 不可重复读

    不可重复读指的是事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取的结果。
    分为以下三种情况:
    (1)事务T1读取了某一数据后,事务T2对其做了修改,当事务T1再次读数据时,得到了与前一次不同的值。
    (2)事务T1读取了某一数据后,事务T2删除了其中的记录,当事务T1再次读数据时,发现某些记录神秘消失了。
    (3)事务T1读取了某一数据后,事务T2插入了一些新的记录,当事务T1再次读数据时,发现多了一些记录。
    后两种操作叫做幻影现象或幻读。

    注:

    不可重复读的重点是修改 : 
    同样的条件 , 你读取过的数据 , 再次读取出来发现值不一样了 
    幻读的重点在于新增或者删除 
    同样的条件 , 第 1 次和第 2 次读出来的记录数不一样


    3.脏读(读“脏”数据)

    读“脏”数据只得是事务T1修改了某一数据,并将其写回磁盘,事务T2读取某一数据后,T1由于某种原因撤销了操作,恢复原值,这时T2读到的数据就和数据库中的数据不一致,称为读“脏”数据。


    产生以上三种现象的原因是并发操作破坏了事务的隔离性。为了应对这些数据不一致性,主要技术主要有:封锁,时间戳,乐观控制法。

     

    参考:

    https://blog.csdn.net/when_less_is_more/article/details/62440192

    https://www.cnblogs.com/phoebus0501/archive/2011/02/28/1966709.html

     

    展开全文
  • 第二十讲 并发控制概述 问题产生 多用户数据库系统存在 允许多个用户同时使用数据库系统 飞机定票数据库系统 银行数据库系统 特点:在同一时刻并发运行事务数可达数百个 不同多事务执行方式 (1)事务串行...

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料
    第二十讲 并发控制概述
    问题的产生
    多用户数据库系统的存在
    允许多个用户同时使用的数据库系统
    飞机定票数据库系统
    银行数据库系统
    特点:在同一时刻并发运行的事务数可达数百个
    不同的多事务执行方式
    (1)事务串行执行
    每个时刻只有一个事务运行,其他事务必须等到这个事务结束以后方能运行
    不能充分利用系统资源,发挥数据库共享资源的特点在这里插入图片描述
    (2)交叉并发方式(Interleaved Concurrency)
    在单处理机系统中,事务的并行执行是这些并行事务的并行操作轮流交叉运行
    单处理机系统中的并行事务并没有真正地并行运行,但能够减少处理机的空闲时间,提高系统的效率
    在这里插入图片描述(3)同时并发方式(simultaneous concurrency)
    多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行
    事务并发执行带来的问题
    最理想地并发方式,但是受制于硬件环境
    更加复杂地并发方式机制
    本章讨论地数据库系统并发控制技术是以单处理机系统为基础的
    会产生多个事务同时存取同一数据的情况
    可能会存取和存储不正确的数据,破坏事务一致性和数据库的一致性

    在这里插入图片描述
    数据库管理系统必须提供并发控制机制
    并发控制机制是衡量一个数据库管理系统性能地重要标志之一。

    11.1并发控制地概述

    事务时并发控制地基本单位
    并发控制机制地任务
    对并发操作进行正确调度
    保证事务地隔离性
    保证数据库地一致性

    并发操作带来数据的不一致性实例
    [例1]飞机订票系统中的一个活动序列
    ① 甲售票点(甲事务)读出某航班的机票余额A,设A=16;
    ② 乙售票点(乙事务)读出同一航班的机票余额A,也为16;
    ③ 甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库;
    ④ 乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库
    结果明明卖出两张机票,数据库中机票余额只减少1 在这里插入图片描述
    这种情况称为数据库的不一致性,是由并发操作引起的。
    在并发操作情况下,对甲、乙两个事务的操作序列的调度是随机的。
    若按上面的调度序列执行,甲事务的修改就被丢失。
    原因:第4步中乙事务修改A并写回后覆盖了甲事务的修改

    并发操作带来的数据不一致性
    丢失修改(Lost Update)
    不可重复读(Non-repeatable Read)
    读“脏”数据(Dirty Read)
    记号
    R(x):读数据x
    W(x):写数据x
    在这里插入图片描述

    1. 丢失修改
      两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。
      上面飞机订票例子就属此类 在这里插入图片描述
    2. 不可重复读
      不可重复读是指事务T1读取数据后,事务T2
      执行更新操作,使T1无法再现前一次读取结果。
      不可重复读包括三种情况:
      (1)事务T1读取某一数据后,事务T2对其做了修改,当事务T1再次读该数据时,得到与前一次不同的值
      在这里插入图片描述
      T1读取B=100进行运算
      T2读取同一数据B,对其进行修改后将B=200写回数据库。
      T1为了对读取值校对重读B,B已为200,与第一次读取值不一致
      (2)事务T1按一定条件从数据库中读取了某些数据记录后,事务T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失了
      (3)事务T1按一定条件从数据库中读取某些数据记录后,事务T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录。
      后两种不可重复读有时也称为幻影现象(Phantom Row)
      读“脏”数据是指:
      事务T1修改某一数据,并将其写回磁盘
      事务T2读取同一数据后,T1由于某种原因被撤销
      这时T1已修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致
      T2读到的数据就为“脏”数据,即不正确的数据

    在这里插入图片描述
    T1将C值修改为200,T2读到C为200
    T1由于某种原因撤销,其修改作废,C恢复原值100
    这时T2读到的C为200,与数据库内容不一致,就是“脏”数据
    数据不一致性:由于并发操作破坏了事务的隔离性
    并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,从而避免造成数据的不一致性
    对数据库的应用有的时候允许某些不一致性1,可以降低对一致性地要求以减少系统开销。

    并发控制的主要计数
    封锁(Locking)
    时间戳(Timestamp)
    乐观控制法
    多版本并发控制(MVCC)

    小结

    并发操作带来的数据的不一致性
    1.丢失操作(修改-修改冲突)
    2.不可重复读(读-更新冲突)
    修改,删除,插入
    3.读脏数据,修改-读冲突

    第21讲 封锁
    11.2封锁
    什么是封锁,
    基本封锁类型
    锁的相容矩阵

    什么是封锁
    封锁就是事务T在对某个数据对象(例如表,记录等)操作之前,先向系统发出请求,对其枷锁
    枷锁后事务T就对该数据库对象有了一定的控制,在事务T释放她的锁之前,其他的事物不能更新此数据对象

    封锁是实现并发控制的一个非常重要技术
    基本封锁类型
    一个事务对某个数据对象加锁后究竟拥有什么样的控制由封锁的类型决定
    基本封锁类型
    排它锁(Exclusive LOCKS简记为X锁)
    共享锁 (Share Locks简记为S锁)

    排它锁
    排它锁又称为写锁
    若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁
    保证其他事务在T释放A上的锁之前不能再读取和修改A

    共享锁
    共享锁又称为读锁
    若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁
    保证其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改

    在这里插入图片描述
    在这里插入图片描述
    在锁的相容矩阵中:
    最左边一列表示事务T1已经获得的数据对象上的锁的类型,其中横线表示没有加锁。
    最上面一行表示另一事务T2对同一数据对象发出的封锁请求。
    T2的封锁请求能否被满足用矩阵中的Y和N表示
    Y表示事务T2的封锁要求与T1已持有的锁相容,封锁请求可以满足
    N表示T2的封锁请求与T1已持有的锁冲突,T2的请求被拒绝
    11.3封锁协议

    什么是封锁协议
    在运用X锁和S锁对数据对象加锁的时候,需要约定一些规则,这些规则称为封锁协议locking protocol
    什么时候申请X锁或者S锁
    持锁时间
    什么时候释放

    对封锁方式规定不同的规则,就形成了各种不同的封锁协议,在不同程度上保证了并发操作的正确调度

    保证数据一致性的常用封锁协议
    三级封锁协议
    1.一级封锁协议
    2.二级封锁协议
    3.三级封锁协议

    1.一级封锁协议
    一级封锁协议
    事务T在修改数据R之前必须先对其加X锁,直到事务结束之后才能释放
    正常结束(COMMIT)
    非正常结束(ROLLBACK)
    一级封锁协议可以防止丢失和蟹盖,并且保证事务T是可以恢复的

    在这里插入图片描述
    没有丢失修改
    事务T1在读A进行修改之前先对A加X锁
    当T2再请求对A加X锁时被拒绝
    T2只能等待T1释放A上的锁后T2获得对A的X锁
    这时T2读到的A已经是T1更新过的值15
    T2按此新的A值进行运算,并将结果值A=14送回到磁盘。避免了丢失T1的更新。

    在一级封锁协议当中,如果仅仅是读数据不对其进行修改,是不需要加所得,所以它不能保证可重复读和不读脏数据

    在这里插入图片描述
    使用一级封锁协议不能解决的问题
    在这里插入图片描述
    2.二级封锁协议
    一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完之后即可以释放S锁

    二级封锁协议可以防止丢失修改和读脏数据
    在这里插入图片描述
    在这里插入图片描述

    使用封锁机制解决不可重复读问题
    在这里插入图片描述
    在这里插入图片描述
    可重复读
    事务T1在读A,B之前,先对A,B加S锁
    其他事务只能再对A,B加S锁,而不能加X锁,即其他事务只能读A,B,而不能修改
    当T2为修改B而申请对B的X锁时被拒绝只能等待T1释放B上的锁
    T1为验算再读A,B,这时读出的B仍是100,求和结果仍为150,即可重复读
    T1结束才释放A,B上的S锁。T2才获得对B的X锁

    使用封锁机制解决读“脏”数据问题
    在这里插入图片描述
    不读脏数据
    事务T1在对C进行修改之前,先对C加X锁,修改其值后写回磁盘
    T2请求在C上加S锁,因T1已在C上加了X锁,T2只能等待
    T1因某种原因被撤销,C恢复为原值100
    T1释放C上的X锁后T2获得C上的S锁,读C=100。避免了T2读“脏”数据

    在二级封锁协议中,由于读完数据后可以就可以释放S锁,所以它不能保证可以重复读

    在这里插入图片描述
    3.三级封锁协议
    一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束以后才能够释放
    三级封锁协议可以防止丢失,修改,读脏数据和不可重复读

    在这里插入图片描述
    在这里插入图片描述

    小结
    基本封锁类型
    X锁
    S锁
    封锁协议
    一级封锁协议
    二级封锁协议
    三级封锁协议

    展开全文
  • 数据库的并发操作带来的数据库数据不一致问题——因为是全校性选修课,同一时间点大批学生选课,那么必然存在多名学生同时对同一数据进行操作是的问题,如果这种并发操作不加以控制的话,必会造成数据的不一致。...

    最近做的《选修课系统》需要考虑这样一个问题:数据库的并发操作带来的数据库数据不一致问题——因为是全校性选修课,同一时间点大批学生选课,那么必然存在多名学生同时对同一数据进行操作是的问题,如果这种并发操作不加以控制的话,必会造成数据的不一致。

     

    一直知道有这种问题,并且知道这种问题的解决方法——加锁;但是有些东西之前了解的并不是很透彻,于是好好研究了一天,觉得理解的还可以,先总结一部分。

     

    1,什么是并发操作?

    数据库的一个重要特征是:支持数据共享,也就是说允许多个用户程序并行地存取数据库中的数据;那么,多用户或多事物可能同时对同一数据进行操作,这成为并发操作。

     

    2,并发操作可能带来的影响?

    如果不对并发操作进行控制的话,那么就会存取不正确的数据,破坏数据的完整性。——为什么这么说?下面进行介绍

     

    在此之前,先说一下事务的概念。

    3,什么是事务?

    对一件完整的事儿,要么做完整,要么都不做。例如:学生选课—学生选上课时,需要将选课信息写入选课表的同时,更新课程表中的课程余量;如果在添加选课信息时,中断了(不能进行余量更新),那么就会事务回滚,即,数据回滚到没选课之前。

    Begin Transaction

    选课表中添加选课信息;

    更新课程表中的课程余量;

    Commit

    RollBac

     

    事务的SQL语句:

    Begin Transaction开始事务

    Commit提交事务

    RollBack回滚

    注:事务中的多条SQL语句也是一条条执行的,当所有语句执行完后,提交事务,如果其中一条中断,则事务回滚所有操作回到语句执行之前)

    事务的并发主要是为了提高效率,但是,同时它也带来了一定问题

     

    4,并发操作带来的问题?

    之前讲过并发操作——多用户或多事务同时对同一数据进行操作;

    因为事务中的语句也是一条条执行的,所以存在多用户多事务同时对同一数据进行操作的情况;

    并发操作带来的问题:

    1)丢失修改

    2)脏读

    3)不可重复读

     

    4.1丢失修改

    当两个或多个事务(或两个或多个用户)选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在(或每个用户操作时并不会考虑同一时刻是否有别的用户进行着同样的操作)。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。  

     

    例子1:事务T1,事务T2,数据库中数据R=1000

    a.t1时刻,事务T1读取R=1000

    b.过了一会儿 t2时刻,事务T2读取R=1000

    c.t3时刻,事务T1修改R=R-200(那么R=800)写入数据库(此时,数据库中R=800)

    d.过了一会儿 t4时刻,事务T2修改R=R-100(因为在t2时刻读到的数据为R=1000,那么修改后R=900)写入数据库(此时,数据库中R=900

     

    那么最终,数据库中R=900;数据对吗?当然不对,因为T1T2分别对R进行了-200 -100操作,最终数据应为R=700;事务T2的修改覆盖了T1的修改——丢失修改问题

     

     

     

    例子2:选课:学生A、学生B、课程1的余量=20

     

    a.学生A选择课程1时,先读出课程余量20

    b.然而同一时刻(也可是不同时刻,只要在学生A更新数据之前),学生B也读出了课程1的余量20

    c.学生A选择此课程,课程1余量-1,写入数据库,此时课程1的余量=19

    d.学生B选择此课程,课程1余量-1(因为之前读出的课程1余量为20-1后为19),写入数据库,此时课程1的余量=19

     课程余量=19数据正确吗?不正确。实际情况课程余量应更新为18;——B的修改覆盖了A的修改—— 丢失修改问题。

     

     

    解决办法:加锁,只允许并发一个更新事务。

     

    4.2脏读

    当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,

    另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个

    事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。

     

    例子1:事务T1,事务T2,数据库中数据R=1000

    T1

    Begin Transaction开始事务T1

    ReadR=1000;(1)

    R=R-200;(2)此时R=800

    R=R+100;(3)此时R=900

    Commit提交事务T1

     

    a.当事务T1进行到第(2)后,即,数据库中的数据R=800;

    b.事务T2开始读R的值,读出的值为R=800;但此时事务T1还没有进行完整,还未提交事务;

    c.之后事务T1进行第(3)R=R+100,此时R=900事务T1提交,此时数据库中R=900

     

       那么在事务T1提交事务之前,事务T2读出的数据(R=800)为脏数据;

     

    例子2

     a.张三的工资为2000,老板把张三的工资改为了8000(但未提交事务)        

    2.张三查看自己的工资 ,发现工资变为了8000

    3.而后老板发现改错了,回滚了事务,张三的工资又变回了2000

         那么,张三读取的工资8000元就是脏数据

     

     

    解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。

     

     

    4.3不可重复读

      当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。

     

          在一个事务中前后两次读取的结果并不致,导致了不可重复读。

     

     

    例子1:事务T1、事务T2、张三的工资=1000

     

    a.事务T1张三读取自己的工资为1000,操作并没有完成

     

    b.此时(事务T1读取了张三工资为1000)事务2中,修改了张三的工资为2000,并提交了事务.

     

    c.此时(事务T1读取了张三工资为1000元,事务T2修改了张三的工资为2000元)在事务1中,张三再次读取自己的工资时,工资变为了2000

     

    那么,同一个事务中,前后读取的数据不一致—— 不可重复读问题。

     

    解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

     

     

    总结:

    1)事务的并发主要是为了提高效率,但是,同时它也带来了一定问题——丢失修改、读脏数据、不可重复读

    2)结合生活中实例,理解丢失修改、读脏数据、不可重复读问题。

     

    个人理解,如果哪里有理解偏差,忘纠正!

     

    下篇博客会总结“锁”的概念,并解释“锁”是如何解决并发造成的数据不一致问题。

    展开全文
  • 并发控制

    2020-05-02 15:32:37
    目录并发控制并发控制概述丢失修改不可重复读脏读封锁三级封锁协议一级封锁协议二级封锁协议三级封锁...并发操作带来的数据不一致性,所有的问题都指的是在一次事务内,两次事务间就不管了 丢失修改 不可重复读 ...

    并发控制

    并发控制概述

    • 事务是并发控制的基本单位
    • 并发操作带来的数据不一致性,所有的问题都指的是在一次事务内,两次事务间就不管了
      • 丢失修改
      • 不可重复读
      • 读脏数据

    丢失修改

    T1 T2
    over

    不可重复读

    不可重复读是指事务T1读完数据后T2执行了更新操作,T1再读时无法出现和上一次一样的结果

    不可重复读有三种情况:

    • T2修改了某些数据
    • T2删除了某些数据
    • T2插入了数据

    后两种又叫幻读

    脏读

    事务T1修改了数据,并写回了磁盘

    事务T2读了数据

    T1又撤销了数据

    T2读的埋汰啊

    封锁

    锁的基本类型

    共享锁(读锁) 排它锁(写锁)
    事务T对数据加了锁,则事务T可以读但是不能修改。其他事务也只能加读锁 若事务T对数据加了写锁,则只允许T读写

    排它锁和谁都不兼容

    三级封锁协议

    一级封锁协议

    事务T在修改数据R前,必须先对其加X锁,直到事务结束才释放

    • 正常结束——commit
    • 异常结束——rollback

    一级封锁协议可以防止丢失修改,并保证事务是可恢复

    能解决丢失修改,但不能解决脏读和不可重复读

    二级封锁协议

    一级协议加上读数据前加S锁,读完后才可释放

    能解决丢失修改,脏读,但不能解决不可重复读

    三级封锁协议

    一级封锁协议加上读数据前加S锁,事务结束后才能释放

    活锁和死锁

    活锁

    事务T1封锁了数据R

    事务T2又请求封锁R,于是T2等待

    T3也请求封锁R,当T1释放了锁后,系统批准了T3的请求,T2继续等待

    T4也请求,锁释放后给了T4

    T2总也得不到批准,这就是活锁情况

    解决活锁办法:先来先服务

    死锁

    死锁的预防

    • 一次封锁法

      要求每个事务必须一次把要用到的数据都加上锁

      问题是并发度下降

    • 顺序封锁法

      顺序封锁法是预先对数据对象规定个封锁顺序,所有事务都按这个顺序实行封锁

      维护成本高

    死锁的诊断

    • 超时法

      如果一个事务等待时间过长,就认为发生了死锁

      • 优点:实现简单
      • 缺点:
        • 可能造成误判
        • 若时间设置太长,死锁可能不能及时发现
    • 等待图法

      把事务等待结构画成带方向的图,然后判断图是否有回路

    解除死锁

    找一个处理死锁代价最小的事务,将其撤销

    并发调度的可串行性

    可串行化调度

    多个事务的并发执行是正确的,当且仅当结果与按某一次序串行地执行这些事务时的结果相同

    可串行性

    可串行性是并发事务正确调度的准则

    两段锁协议

    所有事务必须分两个阶段对数据项加锁和解锁

    • 读写之前要先获得锁
    • 释放一个锁后,事务不再申请和获得任何其他锁

    遵守两段锁协议可能发生死锁,因为并没有对使用的数据全部加锁

    封锁粒度

    封锁对象的大小称为封锁粒度

    多粒度封锁

    • 以树的结构表示多级封锁力度
    • 根节点是整个数据库,表示最大的数据粒度
    • 叶节点表示最小的数据粒度

    显式封锁和隐式封锁

    • 显式封锁:直接加载数据对象上
    • 隐式封锁:父节点上了锁,子节点有同样的锁

    意向锁

    目的:提高对某个数据对象加锁时系统的检查效率

    • 如果对一个节点加意向锁,则说明该节点下层节点正在被加锁
    • 对任意节点加基本锁,必须先对它的上层节点加意向锁

    锁的强度

    对其他锁的排斥程度

    强锁代替弱锁没问题,反过来就要出事

    展开全文
  • 并发控制带来的数据不一致性包括数据丢失、不可重复度和“脏读”。 数据丢失 两个事务T1、T2读同一数据并修改,T2提交的结果破坏了T1提交的结果,导致数据的丢失。例如在甲乙两个售票点中,事务T1和T2所读到的票余额...
  • 数据库的并发控制

    2020-05-14 20:39:32
    并发操作带来数据不一致原因? 答:并发操作破坏了事务隔离性。 并发控制的技术有哪些? 答:封锁、时间戳、乐观控制法、多版本并发控制等。 封锁 所谓封锁就是事务T对某个数据对象操作前对其加锁,在...
  • 事务的并发控制

    2018-06-10 22:30:55
    数据库是共享资源,通常有许多个事务同时在运行。...并发操作带来的数据不一致性包括三类:丢失修改、不可重复读和读“脏’夕数据。 ( l )丢失修改(lost update ) 两个事务 Tl 和T2读入同一数据并修改,T2提...
  • 数据库并发控制

    千次阅读 2012-12-28 19:51:42
    1. 在数据库中为什么要并发控制?  答:数据库是共享资源,通常有许多个事务同时在运行。  当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。... 答:并发操作带来的数据不一致
  • (1)、锁的维护带来的开销,这些开销在支持对共享数据并发访问的系统中是没有的。即使是只读事务(查询),它可能改变数据的完整性,通常仍然需要利用锁来保证数据在读取时不会被其他事务修改。但是锁只在最坏的情况...
  • 并发操作带来的数据不一致性包块丢失修改、不可重复读和读‘脏’数据 3.并发控制的技术 并发控制的主要技术有封锁、时间戳、乐观控制法和多版本并发控制。 4.封锁 排它锁(X锁)写锁:保证其他事务在T释放A上的...
  • 第十一章 并发控制 介绍并发操作可能造成数据不一致的问题,讲解并发控制的基本概念和最常用的封锁技术。...并发操作带来的数据不一致性主要包括丢失修改、不可重复读和读“脏”数据等。 ...
  • 2.2 SQL Server 2000+ADO.NET实现并发控制 2.2.1 并发一致性问题 ...下面我们先来看一个例子,说明并发操作带来的数据不一致性问题。 考虑飞机订票系统中的一个活动序列: 甲售票点(甲事务)读出...
  • oracle控制插入数据并发问题

    千次阅读 2019-03-21 10:31:29
    insert when (not exists (select 1 from users where id = '123')) then into users(id) select '123' from ...多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 丢失更新 A,B两个用户读同一数据...
  • 并发控制-11

    2020-09-11 20:57:49
    并发操作带来的数据不一致性 丢失修改(修改-修改冲突) 不可重复读(读-更新冲突) 读脏数据(修改-读冲突) 11.2 封锁 11.2.1 什么是封锁 封锁就是事务T在对某个数据对象(例如表、记录)操作之前,先向系统...
  • 并发操作带来数据不一致性: 丢失修改:两个事务同时读入同一个数据并修改,结果T2提交破坏了T1提交结果 不可重复读:事务T1读取数据后,事务T2执行更新操作,导致T1无法再现前一次读取结果 读脏数据:事务T1...
  • 并发控制机制的任务 对并发操作进行正确调度;保证事务的隔离性;保证数据库的一致性 ...并发操作带来的数据不一致性 丢失修改(Lost Update) 两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T...
  • 数据库:并发控制

    2020-11-22 21:29:15
    可能会存取和存储正确的数据,破坏事务隔离性和数据库的一致并发控制机制的任务: 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性 ★事务是并发控制的基本单位 方式 事务串行执行 ...
  • 第十一章 并发控制

    2018-12-04 17:56:05
    并发控制 11.1 并发控制概述 事务是并发控制的基本单位 并发控制机制的任务 对并发操作进行正确调度 保证事务的隔离性 保证数据库的一致性 这种情况称为数据库的不一致性,是由并发...并发操作带来的数据不一致性 ...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 227
精华内容 90
关键字:

并发控制带来的数据不一致