数据库三级封锁协议简述

我们首先来简单了解一下事务:事务首先是定义一组操作集,这组操作集要么都做,要么都不做。

比如A向B转账100元,操作集为 (1)读取A账户金额

              (2)A账户金额  -  100元

              (3)读取B账户金额

              (4)B账户金额 + 100元

如果这组操作集,没有都执行完,只执行了几条语句,就会导致数据库数据不一致性,钱不翼而飞了。

三级封锁协议,就是在高并发环境下,有多个事务同时执行,保证数据的一致性。一,二,三级协议分别解决了,丢失修改,读脏数据,和不可重复读问题。

1.首先我们来介绍一下基本封锁类型,就是人为的定义的规则,我们必须先知道规则。

锁的类型:

X锁: (Exclusive Locks)排它锁,简记为X锁。

S锁:(Share Locks)共享锁,简记为S锁。

规则如下:①如果一个事务对 数据A加上了X锁,则不再允许其他事务加X锁或者S锁(两把锁都不能加)。

     ②如果一个事务对 数据A加上了S锁,那么其他事务不能对该事务加X锁,可以对事务加S锁(可以加一把S锁)。

记住这两条规则,就可以生成一个锁的相容矩阵:

      一个事务对数据A加上了 X锁,那么另外一个事务对数据A,不能加X锁,不能加S锁。

      一个事务对数据A加上了X锁,那么另外一个事务对数据A,不能加X锁,可以加S锁。

2.了解了以上规则之后我们就来看三个案例:T1,T2 表示两个不同的事务,CPU在调度时,可以分配时间片给T1,T2执行,什么时候执行哪个事务的哪条语句是不确定的。其中R(x)表示从数据库读取x,W(x)表示往数据库写X。

T1                            T2

①时刻     R(A) = 100

②时刻              R(A) = 100

③时刻    R(A) = 100 -10

④时刻          R(A) = 100 - 30

⑤时刻    W(A) = 90

⑥时刻          W(A) = 70

这就出现问题了,明明两个事务先  减10 ,再减30,总数应该是减40 ,结果为 60,这时候就发生了修改丢失。T1事务对A数据的修改丢失了。

重点来了,重点来了,重点来了!!!   这时候来介绍数据库封锁一级协议

协议规则如下:

一个事务对数据修改,需要加上X锁,直到这个事务结束,才把X锁释放。

T1                                                T2

①时刻    Lock(A) //请求对A加锁

R(A) = 100   

②时刻                                     //请求对A加锁,但是加的是X锁,不能再加其他任何锁,只能等待

③时刻    R(A) = 100 -10                              等待

④时刻                                等待

⑤时刻    W(A) = 90                                      等待

⑥时刻 Ulock(A)//释放X锁                等待 

⑦时刻                      Lock(A)        //获得A的锁,并加锁

⑧时刻                        R(A) = 90

⑨时刻                   A = 90 - 30

⑩时刻                   W(A) = 60

?时刻                   Ulock(A)

以上就是一级协议

3.接下来介绍二级封锁协议的规则如下:

  当一个事务写数据A时,需要加上X锁,当一个事务读数据A时,需要加上S锁读完立即释放S锁

原文地址:https://www.cnblogs.com/zzlback/p/12614790.html

时间: 03-31

数据库三级封锁协议简述的相关文章

数据库的并发控制和封锁协议分析

                                                                                   数据库的并发控制和封锁协议分析 [摘 要] 数据库可以提供给多个用户共享数据信息资源,所以就必须对并发的事务进行控制,这种并发控制必须引入一些封锁协议以保证数据的完整性.本文针对数据库并发操作中可能产生的数据不一致性问题进行分析,并给出解决的方法. [关键词] 数据库 并发控制 一致性 封锁 封锁协议 一.引言 目前主流的关系数据库

数据库三级模式

外模式(用户模式) 外模式又称子模式或用户模式,对应于用户级.它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示.外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据.用户可以通过外模式描述语言来描述.定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行.外模式反映了数据库的用户观. 概念模式(逻辑模式) 模式又称概念模式或逻辑模式,对应于概念级.它是由数据库设计者

枯燥的数据库“三级模式”

以下这些概念比较枯枯燥,若学好数据库,还是了解下基础的东西,在实际中感觉好象没有应到,但是系统化的学习还是有了解的必要. ANSI将数据库结构分为3级:面向用户或应用程序员的用户级.面向建立和维护数据库人员的概念级.面向系统程序员的物理级. 外模式.模式.内模式: 1.外模式是特定用户面对的数据视图.外模式又称子模式或用户模式,对应于用户级.不同的用户可以有不同的数据视图,且可能有重复和交叉.在很多情况下,外模式描述的是整个数据库中部分数据,而且外模式通常是逻辑视图的描述,并不实际存储数据.外模

HTTP协议简述

前言 HTTP协议是整个Web的基础,是客户端和服务器端协同工作的基石,要想了解Web的工作原理.优化Web应用,就要完全理解HTTP协议. HTTP的操作过程 1 ,浏览器分析指向页面的URL2 ,浏览器向DNS系统请求解析域名所对应的服务器IP地址3 ,DNS系统解析出服务器的IP,并返回给主机4 ,浏览器与该服务器的进程建立TCP链接(三次握手,端口默认为80)5 ,浏览器发出HTTP请求:如GET /article/index.html6 ,服务器收到请求并作出相应处理,把文件index

2020春季数据库-->三级模式和两层映像

学习数据库的一天,对于数据库系统的三级模式两层映像更多的理解. 1.外模式(用户模式) 外模式又称子模式,对应于用户级.它是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示.外模式是从模式导出的一个子集,包含模式中允许特定用户使用的那部分数据.用户可以通过外模式描述语言来描述.定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行处理.外模式反映了数据库的用户观(视图.查出数据的表).

php mysql jquery ajax 查询数据库三级联动

1.php 页面打开直接展示第一个select option中的数据 2.当第一个下拉列表选中的内容发生改变的时候,查询数据库填充第二个下拉列表 3.当第二个下拉列表选中的内容发生改变时,查询数据库填充第三个下拉列表 注意点: 1.查询出来的数据,如果绑定到select上 2.select cochange事件 3.ajax 请求,提交到某个php 页面,参数是下拉列表选中的值,需要知道如何获取,查询数据库有结果,如果将返回的json格式的数据进行解析 代码: 表 CREATE TABLE `a

主流开源协议简述

开源 ≠ 免费 开源 ≠ 免费 开源 ≠ 免费,重要的事情说三遍. 一.为何要了解开源协议 Java的强大与崛起,应当说强大的开源生态起了不小的作用.在编程的过程中也或多或少能接触到不少优秀的开源软件.框架, 况且我们又乐于找轮子,因此,了解经常见到的开源协议就有必要了.再者,不了解开源协议,随意使用一个带有限制的协议的开源软件甚至 使用没有任何协议的软件,这就像一颗定时炸弹,随时可能会要了你的命! 二.主流开源协议简介 1.Apache License, 2.0 (Apache-2.0 ) 1

SDP协议简述

SDP协议也是文本协议,只需要按照协议本身的格式填充.SDP协议格式即详细信息如下: 会话描述 格式及举例 v=(protocol version) v=0 o=(owner/creator and session identifier) o=用户名 会话id版本网络类型地址类型地址 o=hua 253183  51827  IN  IP4 192.168.2.2 s=(session name) 会话名 i=*(session information) 会话信息 e=*(email addre

http协议---简述

http(Hypertext transfer protocol)超文本传输协议,通过浏览器和服务器进行数据交互,进行超文本(文本.图片.视频等)传输的规定. 也就是说,http协议规定了超文本传输所要遵守的规则.那么网页在输入URL到加载,http究竟做了哪些工作呢? 浏览器负责发起请求和最后的响应请求,服务器接收请求后,处理请求.我们一步一步来看这个过程,http是如何设定步骤,设置规范的. 1.输入URL.不管是链接还是地址栏的输入,情况都是一样的.http协议已经规定了URL的格式,通过