注:内容为自己的推理认知+网络,如有错误和不合理之处,敬请指出。

在多线程环境中我用使用线程锁处理并发问题,而在数据库系统中,并发问题可以细化到事务级别,而DBMS对此的处理方案就是使用锁。

为了适应不同的需求,完善的DBMS对于锁的粒度划分应该是细粒度的,比如行锁、页锁、表锁、数据库锁等。

被锁定的数据对象的表现行为当然和未被锁定的数据对象不同,有的锁可以指示已锁定数据对于其他事务只可读、不可修改,有的锁指示已锁定数据数据对于其他事务既不可读也不可写。

如何使用锁呢?DBMS提供给了我们可以直接在SQL语句上使用的关键字,例如MSSQL中的HOLDLOCK、TABLOCKX等,关键字比较适合于有特殊需求的业务,因为我们不可能为大量的SQL语句都标注关键字,所以DBMS为我们提供了另外的方法——事务隔离级别,相信大家也经常听到这个名词,但是实际项目中用到的却不多,因为业务系统中大部分都使用相同的隔离级别,我们只要在封装好的数据库访问层中写死或者配置在配置文件中就可以了。

 

对于事务隔离级别,大部分数据库都遵循统一的标准,ANSI/ISO SQL92标准中定义了四种隔离级别:

1、序列化(serializable):最高隔离级别,又称串行化,顾名思义,事务进入执行队列,必须一个个顺序执行,不能并发执行。

2:可重复读(repeatable read):不允许未提交读(脏读)和不可重复读(同一事务中对于同一数据任何时候查询到的结果是相同的)

3:已提交读(read committed):不允许未提交读(脏读),但是允许不可重复读

4:未提交读(read uncommitted):允许脏读,即当前事务可以获取到其他事务未提交的更改。

各大DBMS在实现上略有不同。

锁的粒度/隔离级别和并发性/数据一致性有如下的关系:

 

原因简单说一下,因为锁互斥性,所以并发事务会被阻塞,具体细节大家应该都能理解。

隔离级别的作用域是session级别的,对应到程序中就是同一个连接对象,大多数DBMS的默认隔离级别是已提交读(read committed),SQL关键字的加锁优先级要高于事务隔离级别。

数据库锁机制(一)——概述的更多相关文章

  1. 数据库锁机制(以MySQL为例)

    选自:https://blog.csdn.net/aluomaidi/article/details/52460844 https://www.zhihu.com/question/51513268/ ...

  2. [MySQL数据库之事务、读现象、数据库锁机制、多版本控制MVCC、事务隔离机制]

    [MySQL数据库之事务.读现象.数据库锁机制.多版本控制MVCC.事务隔离机制] 事务 1.什么是事务: 事务(Transaction),顾名思义就是要做的或所做的事情,数据库事务指的则是作为单个逻 ...

  3. 传智播客JavaWeb day11--事务的概念、事务的ACID、数据库锁机制、

    1. 什么叫做事务? 2.默认情况下每一条sql语句都是一个事务,然后自动提交事务  ps:如果想多条语句占一个事务,则可以手动设置SetAutoCommit为false 3.关键字 start tr ...

  4. [数据库锁机制] 深入理解乐观锁、悲观锁以及CAS乐观锁的实现机制原理分析

    前言: 在并发访问情况下,可能会出现脏读.不可重复读和幻读等读现象,为了应对这些问题,主流数据库都提供了锁机制,并引入了事务隔离级别的概念.数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务 ...

  5. SQL Server数据库锁机制及类型

    原文地址:http://blog.csdn.net/zp752963831/article/details/3906477

  6. MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

    转 http://blog.csdn.net/hsd2012/article/details/51112009 转 http://blog.csdn.net/e421083458/article/de ...

  7. mysql数据库锁的机制-one

    锁概念 : 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 举例 :以买火车票为例,火车票可面向广大消费者 ...

  8. (转)MySQL优化笔记(八)--锁机制超详细解析(锁分类、事务并发、引擎并发控制)

    当一个系统访问量上来的时候,不只是数据库性能瓶颈问题了,数据库数据安全也会浮现,这时候合理使用数据库锁机制就显得异常重要了. 原文:http://www.jianshu.com/p/163c96983 ...

  9. MySQL数据库锁类型

    锁概念 : 当高并发访问同一个资源时,可能会导致数据不一致,需要一种机制将用户访问数据的顺序进行规范化,以保证数据库数据的一致性.锁就是其中的一种机制. 一个栗子 :以买火车票为例,火车票可面向广大消 ...

随机推荐

  1. JAVA SSH 框架介绍

    SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架, ...

  2. Source Insight中文操作支持的宏

    以下是Source Insight中文字符串支持的宏的实现,在此做个备份. 代码来自网上,非笔者所写.原有代码有个明显的Bug(Del的时候会导致多删除一个字符和多插入一个空格),已经被笔者fix掉. ...

  3. 为什么乱码:<meta http-equiv="content-type">前的非ANSI字符

    为什么乱码:<meta http-equiv="content-type">前的非ANSI字符 浏览器检测网页字符集的默认顺序 浏览器的网页字符集检测顺序通常是: ch ...

  4. 谁会是 Zabbix 和 Nagios 的继任者?

    [编者按]本文根据 Dataloop.IO 的创始人兼 CEO David Gildeh 对监控工具市场的现状分析以及对未来发展趋势的展望,展开拓展讨论. 为什么监控还是一塌糊涂? 为了调研市场,从而 ...

  5. struts2学习笔记(3)——struts2的局部类型转换

    今天又学到了一个新的东西,就是struts2的类型转换. 为什么要类型转换? 今天我就要传一个点的坐标给你,保存时用一个自定义的Point类来保存. 因为在表单里面传过去的是字符串,如“12,23”, ...

  6. asp.net-(含:模拟登陆,照片列表)

    一.画好用户登录界面 同时换下请求的地址. 获取用户信息及判断代码插入位置: 一.画好用户登录界面 同时换下请求的地址. 获取用户信息及判断代码插入位置: <%@ WebHandler Lang ...

  7. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】02-准备

    在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定要买iPhone?需不 ...

  8. *[codility]Country network

    https://codility.com/programmers/challenges/fluorum2014 http://www.51nod.com/onlineJudge/questionCod ...

  9. Spring transaction事务之roll back回滚

    转载自:http://blog.csdn.net/lovejavaydj/article/details/7635848 试验方法: 写一个单元测试,调用一个service层方法(发生对数据库进行写操 ...

  10. 前端必杀技之Javascript 第1天

    学习了javascript基本语法和使用DOM进行简单操作   1.引用javascript方法: a.在<script></script>标签中加入js代码,如: <s ...