`

数据库锁原理

阅读更多

1 为什么需要锁 
数据库通常有大量的用户在同时操作,所以并发的情况下需要控制对临界资源的操作,数据库通过锁来控制对临界资源的访问,从而保证数据的一致性。例如对于同一个账户,操作之前账户余额为1000,同时开始2个事务,一个事务取款100,一个事务往账户中汇入100,那么2个事务结束后,账户的余额必须还是1000,否则要么银行不干,要么个人不干。 
2 锁类型 
2.1 共享锁(读锁) 
读锁是共享的,互相不阻塞,也就是可以多个客户同时读取同一资源,而不互相干扰。 

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

解锁条件:默认情况下,数据被读取之后,数据库立即解锁。例如select * from table中,先锁定第一行,读取后,立即解锁第一行,然后再锁定第二行,这样大大降低锁争用程度。在repeatable read和serializable 这两种事务隔离级别下,共享锁是在事务结束时释放的,serializable对表加锁。 

2.2 排它锁(独占锁)(写锁) 
写锁是排他的,一个写锁会阻塞其他的读锁和写锁,只有这样才能保证同一时刻,只有一个用户能够写入,并阻止其他用户读取正在写入的同一资源。如果要锁定的数据资源,已经放置了其他的锁,则不能再放置排它锁。 

加锁条件:当执行insert update 和delete语句时,数据库会对操纵的资源使用排它锁。 

解锁条件:事务结束时解锁。 
3.锁原理 
锁的基本原理如下: 
1.当第一个事务访问数据库资源时,如果执行select语句,则必须先获得共享锁,如果执行insert update和delete时,必须获得排它锁 
2.当第二个事务也要访问相同的资源时,如果执行select语句,也必须先获得共享锁,如果执行insert update或者delete,也必须获得共享锁。根据已经放置在资源上的锁类型,来决定第二个事务是应该等待第一个事务释放锁,还是立即获得锁。 


 




4 锁粒度 
常见的锁有表锁、 行锁、 页锁、外键锁等。 

锁有一定的消耗,主要有:获得锁,检查锁是否已经解除,释放锁等,这些操作都会增加系统的开销。 

表锁开销比较小,但是并发性能也较差,行锁并发性能高,但是需要更多锁,数据库系统一般都支持锁的自动升级,例如一个事务中的锁过多的时候,可能会将行锁升级到表锁。 

mysql的各个存储引擎根据不同的应用场景采用不同的锁机制,MyISAM存储引擎采用表锁,InnoDB使用行锁。如果执行alert table之类的操作,服务器也会采用表锁,而忽略存储引擎的锁机制。 

页锁,某些数据库支持页锁,页锁粒度介于行锁和表锁之间,用于锁定存放数据的页,1页通常含有n个数据行。 


外键锁:外键会产生高级别的锁,后面介绍死锁的时候会提到。 
5.乐观锁和悲观锁 
悲观锁:假设如果不加锁就一定会出现问题。 
乐观锁:先假定不会出现并发问题,出现问题后再采取相应的措施。 

悲观锁通过select * from tbl for update实现。 
乐观锁可以在表中加一个version字段,每次更新的时候都+1,这样如果出现并发,第二次更新的时候version的值已经不再匹配,可以在这时采取相应的措施。 
6 死锁 
6.1 死锁是如何产生的 
同java的死锁一样,都是互相等待对方释放锁,造成了相互阻塞,造成的死锁。 

请看下面的表格: 


 

6.2 如何避免死锁 
1.修改操作表的顺序 
从上面的示例中可以看出,如果调整一下操作表的顺序就可以避免死锁。 

2.外键 
产生高级别的锁,会阻止其他事务操作或者其他DML操作,如果是因为外键产生的死锁,可以去掉外键约束,由应用来保证数据的完整性,通常生产环境都不建议加外键约束。 

3.短事务 
缩短事务的执行时间,可以减少锁的持有时间,可以降低死锁的风险。 





7 参考资料 
http://www.iteye.com/topic/743285 
http://www.iteye.com/topic/236271 
http://www.iteye.com/topic/170393 
http://thrillerzw.iteye.com/blog/1880242 
http://cfeers.iteye.com/blog/760992   * 
http://blog.sina.com.cn/s/blog_548bd2090100ir7k.html 
http://www.cnblogs.com/ggjucheng/archive/2012/11/14/2770445.html 
http://blog.163.com/qh_odd@126/blog/static/33376057200851625011100/ 
http://wenku.baidu.com/link?url=kS0uwo_ykqH5PJg7AM39Mf2jrZfOqn7gusgJkf8s2kJShOr-n_9CiykvDqzEIoHxYkokG_XY7keyu6OL-Bn_R4pw3xW1pN0IUNbYxNrdu3q 
《精通hibernate》 
《高性能MySQL》

 

from   http://frank1234.iteye.com/blog/2164649

分享到:
评论

相关推荐

    04735数据库系统原理_2022年4月线上实践题(含答案、自学考试大纲)

    6. 数据库事务与并发控制:理解事务的ACID属性,学习事务的提交、回滚和隔离级别,以及并发控制机制,如锁和多版本并发控制(MVCC)。 7. 数据库安全性与完整性:如何设置用户权限,实现数据的访问控制,以及定义和...

    04735数据库系统原理(真题及答案)200710至201710.zip

    《04735数据库系统原理》是一门重要的高等教育自学考试科目,主要涵盖了数据库系统的基础理论、设计方法以及实际应用等内容。这个压缩包文件“04735数据库系统原理(真题及答案)200710至201710.zip”包含了从2007年...

    数据库系统原理4375历年真题()

    数据库系统原理是计算机科学中的一个核心课程,主要探讨如何存储、组织、管理和检索数据,以及如何确保数据的安全性和完整性。4375历年真题集合为准备这门课程的自学者提供了一份宝贵的资源,它包含了从2007年至2010...

    数据库系统原理期末考试简答题.docx

    数据库系统原理是数据库领域的核心概念,它涉及到数据的组织、管理和使用。本篇文章将深入探讨其中的一些关键知识点。 首先,数据与程序的物理独立性和逻辑独立性是数据库设计的重要原则。物理独立性意味着用户的...

    数据库系统原理课件免费下载

    数据库系统原理是计算机科学中的重要学科,主要研究如何有效地存储、管理和检索数据。这份免费的课件涵盖了数据库的基础知识,对于学习者来说是一份宝贵的资源。以下是对课件中可能包含的一些关键知识点的详细说明:...

    数据库系统原理课后答案

    数据库系统原理是计算机科学中的核心课程之一,主要探讨如何有效地存储、管理和检索数据。这份"数据库系统原理课后答案"提供了对课程作业和习题的详尽解答,可以帮助学习者深入理解和掌握数据库系统的概念、设计与...

    数据库系统原理答案 中国矿业大学出版

    同时,事务处理和并发控制也是数据库系统中的重要内容,包括ACID(原子性、一致性、隔离性和持久性)属性、锁机制、乐观并发控制和多版本并发控制(MVCC)。 数据库性能优化是另一个重要的知识点,可能涉及查询优化...

    数据库原理及应用 电子书

    数据库原理及应用是信息技术领域中的核心课程之一,它主要探讨如何有效地存储、管理和检索数据,以支持各种业务和信息系统。本书详细介绍了数据库的基础概念、设计原则以及实际应用,旨在帮助读者深入理解数据库的...

    数据库组成原理答案

    《数据库组成原理》一书深入探讨了数据库的核心概念和技术,旨在帮助学生和自学者理解数据库的工作原理和设计思想。这里,我们将根据书中的内容,结合提供的"数据库实践习题解答",详细解析一些关键知识点。 1. **...

    数据库系统原理04735【更新到201810】.zip

    数据库系统原理是计算机科学中的核心课程之一,它涵盖了数据存储、数据管理、数据查询和数据保护等多个关键领域。这个名为“数据库系统原理04735【更新到201810】.zip”的压缩包文件,显然是针对高等教育自学考试的...

    数据库实现原理 数据库

    根据提供的信息,我们可以推断出该文档主要涉及的是IBM Informix数据库系统的技术细节与实现原理。下面将基于这些信息展开,详细介绍与“数据库实现原理”相关的知识点。 ### 一、IBM Informix 概述 IBM Informix ...

    王能斌-数据库系统原理课件

    "王能斌-数据库系统原理课件" 本课件涵盖了数据库系统原理的基础知识,包括数据库系统概论、实体关系模型、关系模型、SQL、完整性约束、事务处理、并发控制、数据库系统架构、新应用、XML等方面的内容。 数据库...

    数据库系统原理 沈钧毅

    数据库系统原理是信息技术领域中的核心课程之一,沈钧毅教授的这一课件深入浅出地讲解了数据库系统的基础理论和实际应用。在这个压缩包中,我们预计会找到一系列关于数据库系统的PPT或PDF文档,可能包括课程讲义、...

    数据库系统原理 (04735).rar

    数据库系统原理是计算机科学中的核心课程之一,主要探讨如何有效地存储、管理和检索数据。这个主题涉及到数据模型、关系数据库、SQL语言、事务处理、并发控制、数据库设计与优化等多个方面。"04735"可能代表这门课程...

    数据库系统原理2013 年1月 考试及答案

    ### 数据库系统原理 #### 一、单项选择题解析 **1. 数据库系统优于文件系统的特点** - **正确答案**: D. 数据库系统对数据的操作以记录为单位 - **解析**: 文件系统中数据的操作单位往往是整个文件,而数据库系统...

    数据库系统原理总复习

    数据库系统原理是计算机科学中的核心课程之一,它涵盖了数据存储、数据管理、数据查询和数据安全等多个关键领域。本复习资料旨在帮助考生全面理解和掌握这一主题,尤其对备考计算机等级考试的同学具有很高的实用价值...

    数据库系统原理试卷201001

    【数据库系统原理试卷201001】的考试内容主要涵盖了数据库管理系统的概念、数据库设计、数据冗余、数据库的重构与优化、关系模型、函数依赖、数据完整性、SQL语言、事务处理以及数据库恢复等多个核心知识点。...

    《数据库系统原理》教学大纲

    《数据库系统原理》是计算机信息管理专科生的专业必修课程,旨在培养学生对数据库技术的深入理解和实际操作技能。课程共72学时,分为4个学分,由计算机软件教研室开设,适用于计算机信息管理专业。课程内容涵盖...

    04735 数据库系统原理201904.zip

    数据库系统原理是计算机科学与技术领域中的核心课程之一,它主要涵盖了数据库的设计、实现、管理和优化等关键概念。"04735 数据库系统原理201904.zip"是一个压缩包文件,其中包含了不同年份的该课程相关的学习资料,...

    数据库原理题库数据库原理题库

    数据库原理是计算机科学中的核心领域,它涉及到数据的组织、存储、检索以及管理。这个题库集合了关于数据库原理的各种问题,旨在帮助学习者深入理解并掌握相关知识。以下是根据标题和描述提炼出的一些关键知识点: ...

Global site tag (gtag.js) - Google Analytics