事务管理基础:排它锁和共享锁相关知识笔记

 

 

1、排它锁、共享锁出现的意义

数据库的并发事务对数据库进行读写,可能会破坏事务的隔离性和数据一致性。为了保持事务的隔离性,系统必须对事务之间的相互作用加以控制。最典型的做法就是当一个事务访问某个数据对象时,

其他事务都不能更新该数据对象。最常用的控制手段就是加锁,该方法是只允许事务访问当前持有锁的数据项。其中最常用的有排它锁、共享锁。

2、排它锁(Exclusive Locks 简称X锁)

排它锁也成为写锁,主要用于对数据读写操作时进行锁定。如果事务T对数据A加上排它锁后,就只允许事务T对数据A的读取、修改,其他事务对数据A不能再加任何锁,也不能读取和修改数据A,直到事务T释放A上的排它锁。

3、共享锁(Share Locks 简称S锁)

共享锁也成为读锁,主要用于对数据进行读取操作时进行锁定。如果事务T对数据A加上共享锁后,事务T只能读取数据A但不可以修改,其他事务可以读数据A加S锁来读取,只要数据A上有共享锁,任何事务只能对其加共享锁,而不能加排它锁来修改。

4、封锁协议 

4.1 封锁协议的作用 

因为数据库加锁可以限制其他事务对数据的操作,但会降低事务的并发性,这个时候可以采用封锁协议来保证事务的一致性前提下尽可能提高并发性。封锁协议是对数据加锁类型、加锁时间、释放锁时间的一些规则的描述。

常用的封锁协议:一级封锁协议、二级封锁协议、三级封锁协议。 

  • 一级封锁协议:主要是指事务T在修改数据A之前必须先对其加上排它锁,直到事务结束后才能释放排它锁。一级封锁协议使得在一个事务修改数据期间,其他事务不能对该数据进行修改,只能等该事务结束之后,主要解决了丢失修改的问题。 

  • 二级封锁协议:主要是在一级封锁协议加上事务T在读取数据A之前必须对其加上共享锁,读取完成后释放共享锁。二级封锁协议使得一个事务不能读取被其他事务修改中的数据。解决了数据脏读的问题。但事务T如果读取数据A之后,其他事务再对A做完修改,事务T再去读取A,会产生不可重复的错误。

  • 三级封锁协议:主要是在一级封锁协议加上事务T在读取数据A之前必须对其加上共享锁,读取完成后释放共享锁,直到事务结束后才释放共享锁。这样就解决了二级封锁协议的不可重复读的问题。

 

 

IT技术分享社区

个人博客网站:https://programmerblog.xyz

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php对象底层结构,PHP 底层原理之类和对象

对于PHPer来说,OOP是不可或缺的开发思维,但是你对php类和对象的底层实现又了解多少呢?本着知其然且知其所以然的思想,让我们一起来寻找答案~类的底层实现可看作是之前我们讲过的变量、函数等的知识集合。所以想要理解更深入的同学…

程序默认在副屏显示_聊一款性价比极高的电竞显示器

小米在6月17日开启了小米显示器27寸165Hz版本的众筹,这台显示器的分辨率为2560x1440,也就是大家熟悉的小金刚,它与大金刚的最大区别也只是省去了G-Sync功能,而其他方面的参数几乎是一致的。那么我们今天就来聊聊这款真香的显示器。…

CocoaPods安装和使用教程

CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他…

事务管理基础:两段锁协议、活锁、死锁相关知识整理

1、两段锁协议(Two-phase Locking Protocol) 两段锁协议是指对任何数据进行读写之前必须对数据进行加锁;在释放一个封锁之后,事务不再申请和获得任何其他封锁。两段锁协议中两段的含义:事务分为两个阶段,第…

php 空函数,PHP 中函数 isset(), empty(), is_null() 的区别

PHP 中函数 isset(), empty(), is_null() 的区别,使用 PHP 进行开发的时候,经常会用到 isset(), empty(), is_null() 这几个函数对数据进行判断,但是这是哪个函数的具体区别其实没有很好的掌握。下面我们详细讲解一下:NULL什么是 NULL&#x…

UVa11021

11021 TribblesGRAVITATION, n.“The tendency of all bodies to approach one another with a strengthproportion to the quantity of matter they contain – the quantity ofmatter they contain being ascertained by the strength of their tendencyto approach one anot…

python合法变量类型_Python 变量类型

变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或…

数据库系统故障相关知识笔记

数据库系统中可能发生的故障主要包括事务故障、系统故障、介质故障、计算机病毒等。下面给大家简单整理一下相关的故障知识笔记。1、事务故障事务故障是因为程序执行错误而引起的非预期、异常终止的故障。主要有逻辑错误、系统错误导致事务的执行失败。逻辑错误:比如…

dede php分页代码,DEDECMS系统分页标签自定义二次开发

以前有给大家写过一篇自定义dedecms留言板的分页,下面我再来给大家分享一篇自定义常见的分页标签例子,希望文章对大家会有所帮助.自定搜索结果页面文章分页,在/plus文件夹中新建一个search.php文件,代码如下:require_once(dirname(__FILE__)."/../include/common.inc.php&…

windows下gvim中文乱码解决方案

网罗了一些网上的解决windows下gvim中文乱码的解决方案,都试了一遍,可惜都不能完全解决我的所有问题,最后我综合一下网上的两种方案,得到了最后完全解决我的中文乱码问题的方案,配置很简单,就是把下面的配置…

python主从_python—mariadb自动部署主从

import configparserimport osdef config_mariadb_yum():exists os.path.exists(/etc/yum.repos.d/mariadb.repo)if exists:print(mariadb.repo文件已经存在)yum_install_mariadb()else:config configparser.ConfigParser()config.read(/etc/yum.repos.d/mariadb.repo, encod…

数据库系备份相关知识笔记

1、数据库备份的知识介绍在互联网时代,最珍贵的财产不是计算机应用软件,更不是计算机硬件,而是企业在业务长期发展过程中积累下来的业务数据。建立网络最根本的用途是更加方便的传递、使用数据,人为原因、硬盘损坏、计算机病毒、断…

python数组合并、输入三行数据,如何在python中合并两个或三个3D数组?

Numpy的hstack、vstack或dstack(取决于要连接数组的轴)将连接多维数组。在请注意,对于MODIS气溶胶数据,使用hstack连接阵列有时会抛出错误,因为有时阵列是203 x 135,有时是204 x 135,因此水平维度并不总是匹配的基于您…

操作系统:分享6 个“吓人”的 Linux 命令

目录 1、crypt 2、kill 3、shred 5、at midnight 6、daemons 1、crypt 好吧,我们一直都有crypt。顾名思义,crypt不是存放垃圾文件的地宫或墓坑,而是加密文件内容的命令。 如今,“crypt”通常作为一个脚本而实现:通过调…

谷歌网络代理工具_谷歌更新了Dialogflow AI引擎,帮助客户创建更好的虚拟代理...

日前,谷歌发布了对其Dialogflow的一些重要更新,对话流是其呼叫中心人工智能服务的主要技术,它可以自动与呼叫中心的客户进行交互。据悉,Dialogflow是一个会话人工智能引擎,用于创建虚拟代理,可以理解和响应…

php use闭包参数,php 闭包use的使用

闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。PHP的闭包即为匿名函数。示例如下。$message hello;// 继承 $message$example function () use ($message) {var_dump($message);};echo $example(); //hello// Inherited variables value is fr…

数据库恢复相关知识笔记

1、数据库恢复的原理数据库恢复的原理主要是在数据库发生故障之后,建立冗余数据,在故障发生之后利用冗余数据来完成数据库恢复。数据转储和建立日志文件是建立冗余数据常用的技术手段。一般情况下两种技术手段会同时使用。2、故障恢复的两个操作故障恢复…

C++ map注意事项

C map注意事项 1、在map中,由key查找value时,首先要判断map中是否包含key。 2、如果不检查,直接返回map[key],可能会出现意想不到的行为。如果map包含key,没有问题,如果map不包含key,使用下标有…