• 并发操作引发的问题以及封锁协议


    并发操作可能破坏事务的隔离性,带来的数据不一致性包括三类:
    1)丢失修改    2)不可重复读    3)读“脏”数据

    是网络数据库中的一个非常重要的概念,当多个用户同时对数据库并发操作时,会带来数据不一致的问题,所以,锁主要用于多用户环境下保证数据库完整性和一致性

    数据库锁出现的目的:处理并发问题

    数据库系统角度,基本的锁类型有两种:排它锁(Exclusive Lock)共享锁(Shared  Lock).

    排它锁(X锁),也称为写锁,表示对数据进行写操作。

    当事务T对数据A加上X锁时,只允许事务T读取和修改数据A

    共享锁(S锁),也称为读锁,用于所有的只读数据操作。

    当事务T对数据A加上S锁时,其他事务只能再对数据A加S锁,而不能加X锁,直到T释放A上的S锁。

    若事务T对数据对象A加了S锁,则T就可以对A进行读取,但不能进行更新(读锁),在T释放A上的S锁以前,其他事务可以再对A加S锁,但不能加X锁,从而可以读取A,但不能更新A。

    封锁协议:在运用X锁和S锁对数据对象加锁时,还需要约定一些规则 ,例如何时申请X锁或S锁、持锁时间、何时释放等。称这些规则为封锁协议(Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。

    1)一级封锁协议

    一级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。

    一级封锁协议可以防止丢失修改,并保证事务T是可恢复的。使用一级封锁协议可以解决丢失修改问题。

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

    2)二级封锁协议

    二级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后方可释放S锁。

    二级封锁协议除防止了丢失修改,还可以进一步防止读“脏”数据。但在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。

    3)三级封锁协议 

    三级封锁协议是:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

    三级封锁协议除防止了丢失修改不读“脏”数据外,还进一步防止了不可重复读


  • 相关阅读:
    thinkphp5日期时间查询比较和whereTime使用方法
    Bootstrap 标签
    MySQL 查询当天、周、月,最近一周、一月的数据,以及当年每月的统计数据
    把字符串解析到变量,数组变量中的函数 PHP parse_str() 函数
    PHP 数组转字符串,与字符串转数组
    php 获取最近一周,一个月,一年
    linux达人养成计划学习笔记(六)—— 挂载命令
    linux达人养成计划学习笔记(五)—— 关机和重启命令
    linux达人养成计划学习笔记(四)—— 压缩命令
    linux达人养成计划学习笔记(三)—— 帮助命令
  • 原文地址:https://www.cnblogs.com/CKhomepage/p/10653955.html
Copyright © 2020-2023  润新知