`

数据库锁的基本原理

阅读更多

为了保证数据的完事性和一致性,数据库系统采用锁来实现事务的隔离性。各种大型数据库采用的锁基本理论是一致的,但在具体实现上各有差别。

从并发事务锁定的关系上看,可以分为共享锁定和独占锁定。从锁定的对象不同,一般可以分为表锁定和行锁定。

共享锁用于读取数据操作,它是非独占的,允许其他事务同时读取其锁定的资源,但不允许其他事务更新它。

独占锁也叫排他锁,适用于修改数据的场合。它所锁定的资源,其他事务不能读取也不能修改。

当一个事务访问某种数据库资源时,如果执行select语句,必须先获得共享锁,如果执行insertupdatedelete语句,必须获得独占锁,这些锁用于锁定被操作的资源。

当第二个事务也要访问相同的资源时,如果执行select语句,也必须先获得共享锁,如果执行insertupdatedelete语句,也必须获得独占锁。此时根据已经旋转在资源上的锁的类型,来决定第二个事务应该等待第一个事务解除对应资源的锁定,还是可以立刻获得锁。

资源上已经放置的锁

第二个事务进行读操作

第二个事务进行更新操作

立即获得共享锁

立即获得独占锁

共享锁

立即获得共享锁

等待第一个事务解除共享锁

独占锁

等待第一个事务解除独占锁

等待第一个事务解除独占锁

 

1 共享锁

1、加锁的条件:当一个事务执行select语句时,数据库系统会为这个事务分配一把共享锁,来锁定被查询的数据。

2、解锁的条件:在默认情况下,数据被读取后,数据库系统立即解除共享锁。例如,当一个事务执行查询“SELECT * FROM accounts”语句时,数据库系统首先锁定第一行,读取之后,解除对第一行的锁定,然后锁定第二行。这样,在一个事务读操作过程中,允许其他事务同时更新accounts表中未锁定的行。

3、与其他锁的兼容性:如果数据资源上放置了共享锁,还能再放置共享锁和更新锁。

4、并发性能:具有良好的并发性能,当数据被放置共享锁后,还可以再放置共享锁或更新锁。所以并发性能很好。 

2 独占锁

1、加锁的条件:当一个事务执行insertupdatedelete语句时,数据库系统会自动对SQL语句操纵的数据资源使用独占锁。如果该数据资源已经有其他锁(任何锁)存在时,就无法对其再放置独占锁了。

2、解锁的条件:独占锁需要等到事务结束才能被解除。

3、兼容性:独占锁不能和其他锁兼容,如果数据资源上已经加了独占锁,就不能再放置其他的锁了。同样,如果数据资源上已经放置了其他锁,那么也就不能再放置独占锁了。

4、并发性能:不用说了,最差。只允许一个事务访问锁定的数据,如果其他事务也需要访问该数据,就必须等待,起到前一个事务结束,解除了独占锁,其他事务才有机会访问该数据。

3 更新锁

更新锁在的初始化阶段用来锁定可能要被修改的资源,这可以避免使用共享锁造成的死锁现象。例如,对于以下的update语句:

UPDATE accounts SET balance=900 WHERE id=1

更新操作需要分两步:

读取accounts表中id1的记录。

执行更新操作。

如果在第一步使用共享锁,第二步把锁升级为独占锁,就可能出现死锁现象。例如:两个事务都获取了同一数据资源的共享锁,然后都要把锁升级为独占锁,但需要等待另一个事务解除共享锁才能升级为独占锁,这就造成了死锁。

更新锁有如下特征:

加锁的条件:当一个事务执行update语句时,数据库系统会先为事务分配一把更新锁。

解锁的条件:当读取数据完毕,执行更新操作时,会把更新锁升级为独占锁。

与其他锁的兼容性:更新锁与共享锁是兼容的,也就是说,一个资源可以同时放置更新锁和共享锁,但是最多放置一把更新锁。这样,当多个事务更新相同的数据时,只有一个事务能获得更新锁,然后再把更新锁升级为独占锁,其他事务必须等到前一个事务结束后,才能获取得更新锁,这就避免了死锁。

并发性能:允许多个事务同时读锁定的资源,但不允许其他事务修改它。

<!--EndFragment-->
分享到:
评论

相关推荐

    Oracle数据库系统原理++第2版

    主要包括关系模型基本理论,ER图及范式理论,SQL语言,Oracle存储空间的分配及释放时机,索引原理,事务处理及锁,备份恢复原理,存储过程及触发器,网络连接配置等内容。强调在学习各种技能的同时,理解关系型...

    数据库原理

    介绍数据库原理的全套课件,通过讲述数据库系统的基本概念和基本理论的内容,建立较扎实的数据库语言基础,了解数据库系统的内部结构,如数据库语言的查询处理、事务中锁控制等知识,掌握数据库管理系统的使用方法,...

    网络数据库课件ppt(web数据库ppt)

    《网络数据库技术》目的是通过本课程的学习使学生能了解网络数据库的基本知识、基本原理和基本技术,学会网络数据库应用系统的设计方法和步骤。 本课程的学习任务是,掌握网络数据库系统一些基础知识和基本要点,...

    数据库系统原理A.pdf

    R A B C a b c d a f c b d S A B C b g A d a F 山东海天软件工程专修学院模拟试卷 《数据库系统原理》A试卷 1、 单项选择题(本大题共15小题,每小题2分,共30分) 在每小题列出的四个备选项中只有一个是符合题目...

    数据库系统概论(第三版).pdf

    最原始的数据库讲解,学习数据库的最好书籍,从原理入手,从数据库的基本概念,讲到sql,锁的机制,死锁,分区,块。。 最好讲到数据库的设计!三范式!

    分布式数据库试题及答案.doc

    2.7. 面向对象的数据库是如何产生的,其基本原理是什么?有哪些创新特性? 13 2.8. r r 一定等于r r 吗?在什么条件下r r = r r 成立? 14 2.9. 为了设计一个健壮的分布式系统,你必须知道可能发生哪种类型的失败。 ...

    数据库系统原理(含答案).doc

    数据库系统原理 自测题(2) 一、单项选择题 1.数据库物理存储方式的描述称为 【 B 】 A.外模式 B.内模式 C.概念模式 D.逻辑模式 2.在下面给出的内容中,不属于DBA职责的是 【 A 】 A.定义概念模式 B.修改...

    基于redis实现分布式锁的原理与方法

    系统的不断扩大,分布式锁是最基本的保障。与单机的多线程不一样的是,分布式跨多个机器。线程的共享变量无法跨机器。 为了保证一个在高并发存场景下只能被同一个线程操作,java并发处理提供ReentrantLock或...

    数据库课程设计图书馆管理系统.doc

    《数据库系统原理》课程设计—图书馆管理系统 一、课程设计的目的及意义 本课程设计是在学习《数据库原理》课程后,进行的一次全面的综合训练,其目的在于 加深对数据库原理的理解,掌握运用数据库应用系统开发软件...

    oracle 12c 数据库 教程

    (三)还原数据的工作原理 66 (四)还原数据与重做数据 67 (五)管理还原数据 67 (六)还原保留期和确保还原保留期 67 九、数据库审计 68 (一)什么是数据库审计 68 (二)审计的参数设置 69 (三)强制审计 69 ...

    分布式锁三种实现方式及对比

    注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。 2. 乐观锁 所谓乐观锁与前边...

    研究生分布式数据库参考习题

    2.7. 面向对象的数据库是如何产生的,其基本原理是什么?有哪些创新特性? 13 2.8. r r 一定等于r r 吗?在什么条件下r r = r r 成立? 14 2.9. 为了设计一个健壮的分布式系统,你必须知道可能发生哪种类型的失败。...

    micro-DB:自己动手写数据库-基于Java语言的简易关系型数据库

    涉及缓存,数据容量存储结构(B +树),锁,事务,优化器,重做/撤消日志等核心原理。 1.关系数据结构基本定义 添加数据库,表,行,细分等基础定义 2.数据持久化 每一个表存储成为一个物理磁盘文件,通过表数据变多...

    Oracle11g从入门到精通

    4.6.1 触发器的基本原理 4.6.2 创建触发器 4.6.3 执行触发器 4.6.4 删除触发器 第5章 熟悉SQL*Plus-Oracle数据库环境 5.1 进入和退出SQL*Plus环境 5.1.1 启动SQL*Plus 5.1.2 创建SQL*Plus快捷方式 5.1.3 ...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    10.7.4 CHM的基本特性 10.7.5 CHM的管理与维护 10.7.6 CHM与OSWatcher对比 10.8本章小结 第11章 最高可用性 11.1最高可用性架构 11.1.1 Data Guard优势 11.1.2客户端Failover 11.1.3 Data Guard配置 11.1.4...

    你真的懂Mysql的锁吗?详谈Myql的锁机制

    锁的基本介绍 要说锁,应该追溯到操作系统中的多线程原理,锁机制在其中发挥着必不可少的作用,先抛出锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制 在数据库中,除传统的计算资源(如CPU、RAM、I/O...

    Redis分布式锁解决接口幂等的两种方案

    如果是,并且有兴趣同我一起学习,那请接着看本文,通过本文能够学习到分布式锁的基本原理、如何实现分布式锁以及使用分布式锁解决接口幂等问题。 二、基础知识 本文是通过使用 Redis 实现分布式锁,当然也可用使用...

Global site tag (gtag.js) - Google Analytics