关闭

数据库事务和锁机制

290人阅读 评论(0) 收藏 举报

前几日有一个猎头公司的面试,其中问道我事务隔离这块的知识点,猛一问真是想不起来啊,顿感羞愧啊,回来专门总结一下这方面的知识来夯实一下之前的知识体系,也提醒广大园友们进步在于总结啊,好多不用的知识点,有时候有必要温故知新啊。

简介   

      ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).这是可靠数据库所应具备的几个特性.

     我们通过SQL SERVER对数据库进行管理,不可避免要实现多个进程访问数据库同一数据,或者修改同一数据。 这样就不得不提到SQL Server利用加锁和阻塞来保证事务之间不同等级的隔离性,从而实现事务的互不干扰的访问和操作数据库。

     首先我们要知道都有哪些干扰会影响数据的隔离性:

     1、更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。

     2、脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

      举例说明什么是脏读:

1  23

通过以上三个图不难发现,当事务1去插入一条数据,然后图二去读取被插入数据的表,此时事务1还没有commit结果查询结果直接将内存中的脏数据读取出来,再Read Uncommitted 这个级别下,会出现脏读,一旦数据未提交或者未提交成功则读取数据是脏读错误数据。

     3、非重复读(nonrepeatableread):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。

      举例说明:

      123

以上三图可以清楚表示出,在一个事务中,两个查询对同一个表,而再事务两次查询中发生了一次数据更新,导致事务中两次查询的结果不同。这就是所谓的nonrepeatableread。

     4、幻像(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。

    QQ截图20150521162827

在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同:

◆未授权读取(Read Uncommitted):允许脏读取,但不允许更新丢失。如果一个事务已经开始写数据,则另外一个事务则不允许同时进行写操作,但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。

◆授权读取(Read Committed):允许不可重复读取,但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现。读取数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止其他事务访问该行。

◆可重复读取(Repeatable Read):禁止不可重复读取和脏读取,但是有时可能出现幻影数据。这可以通过“共享读锁”和“排他写锁”实现。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。

◆序列化(Serializable):提供严格的事务隔离。它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作的事务访问到。

   QQ截图20150521165334

          

最后附上设置隔离级别的语法(老是记不清楚):

SET TRANSACTION ISOLATION LEVEL 
{

READ UNCOMMITTED

| READ COMMITTED

| REPEATABLE READ

| SERIALIZABLE

}

总结

     通过全篇的讲述,我们也能清晰的理顺一条思路,隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读取,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。

0
0
查看评论

数据库事务和锁机制小结

一、事务     事务的概念:事务是指逻辑上的一组操作,这组操作要么同时完成要么同时不完成.            事务的管理:默认情况下,数据库会自动管理事务,管理的方式是一条语句就独占一个事务.  ...
  • qq_19776363
  • qq_19776363
  • 2015-08-05 17:39
  • 486

数据库事务锁机制

1、脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。例如:  张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。  与此同时,  事务B正在读取张三的工资,读取到张三的工资为80...
  • qq_35420123
  • qq_35420123
  • 2018-01-19 17:04
  • 31

数据库事务及锁机制

数据库事务及锁机制               转载:事务及锁机制 转载:MySQL表级锁和行级锁 转载:数据库锁机制 悲观锁: 共享锁(share locks):也称读锁,事务A对对象加共享锁,其他事务对此对象...
  • qq_25223941
  • qq_25223941
  • 2017-08-09 17:56
  • 76

MSSQLServer数据库事务锁机制分析

锁是网络数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性。各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别。目前,大多数数据库管理系统都或多或少具有自我调节、自我管理的功能,因此很多用户实际上不清楚锁的理论和所用数据库中锁的具体实现。     Micro...
  • scent2002
  • scent2002
  • 2007-12-19 15:14
  • 247

数据库事务隔离级别的实现-锁机制

一 数据库事务处理中可能的异状  在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有四种问题,归结如下: 1丢失更新   如果两个事务都要更新数据库同一个记录X,x=100 事务A 事务B 读取X=100  ...
  • zhongzh86
  • zhongzh86
  • 2015-03-03 16:58
  • 566

数据库事务以及锁机制(乐观锁、悲观锁)

事务的ACID特性和结束方式 原子性 事务是数据库中的一个逻辑处理单元,其中的操作要么都做,要么都不做。 一致性 事务的执行结果必须是使数据库从一个一致性状态到另外一个一致性状态。 隔离性 一个事务的操作以及使用的数据应该是对其他并发事务隔离的,事务之间应该是独立的互不...
  • he615686916
  • he615686916
  • 2017-01-11 14:48
  • 185

Mysql数据库事务、隔离、锁机制介绍

Mysql事务、隔离、锁机制 最近在学习mysql时接触到相关这些内容,他们更多的被运用与实际项目中以控制数据库操作的安全,希望分享笔记帮助同样是初学者的朋友更好的理解mysql事务处理的控制
  • yadicoco49
  • yadicoco49
  • 2017-01-14 02:30
  • 141

关于数据库事务隔离级别的介绍

事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护
  • xiasihua88
  • xiasihua88
  • 2011-02-16 09:06
  • 1328

Spring的事务管理和数据库事务相关知识

1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱。  比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱;然后ATM出1000元钱。这两个步骤必须是要么都执行要么都不执行。如果银行卡扣除了1000块但是ATM出钱失败的话,你将会损失1...
  • zbw18297786698
  • zbw18297786698
  • 2016-11-20 14:46
  • 3117

spring事务和数据库数据库事务的区别

spring事务和数据库数据库事务的区别 不使用事务时,每次调用hibernateTemplate的方法会立刻进行事务提交. 而使用事务后,会在你配置的类的方法执行完成后再进行事务提交,如果一个方法中同时进行了多次的插入、修改或删除操\ 作,会统一的进行提交或回滚,这样可以保证数据操作会...
  • rainyear
  • rainyear
  • 2013-12-09 11:55
  • 1898
    个人资料
    • 访问:173669次
    • 积分:3534
    • 等级:
    • 排名:第11129名
    • 原创:156篇
    • 转载:250篇
    • 译文:2篇
    • 评论:15条
    最新评论