数据库事务和锁

原创 2008年10月03日 16:06:00
 简述

  关系型数据库有四个显著的特征,即安全性、完整性、并发性和监测性。数据库的安全性就是要保证数据库中数据的安全,防止未授权用户随意修改数据库中的数据,确保数据的安全。 在大多数数据库管理系统中,主要是通过许可来保证数据库的安全性。完整性是数据库的一个重要特征,也是保证数据库中的数据切实有效、防止错误、实现商业规则的一种重要机制。在数据库中,区别所保存的数据是无用的垃圾还是有价值的信息,主要是依据数据库的完整性是否健全。

  在SQL Server 7.0中,数据的完整性是通过一系列逻辑来保障的,这些逻辑分为三个方面,即实体完整性、域完整性和参考完整性。对任何系统都可以这样说,没有监测,就没有优化。这句话用在数据库管理系统方面,也是切合实际的。只有通过对数据库进行全面的性能监测,也才能发现影响系统性能的因素和瓶颈,才能针对瓶颈因素,采取切合实际策略,解决问题,提高系统的性能。并发性也是一个非常重要的概念,它是用来解决多个用户对同一数据进行操作时的问题。

  特别是对于网络数据库来说,这个特点更加突出。提高数据库的处理速度,单单依靠提高计算机的物理速度是不够的,还必须充分考虑数据库的并发性问题,提高数据库并发性的效率。那么如何保证并发性呢?在这个面向下一世纪的数据库产品SQL Server 7.0中,通过使用事务和锁机制,解决了数据库的并发性问题。

  概念和特点

  事务和锁是两个紧密联系的概念。事务就是一个单元的工作,包括一系列的操作这些操作要么全部成功,要么全部失败。事务确保多个数据的修改作为一个单元来处理。例如,在银行业务中,有一条记帐原则,即有借有贷,借贷相等。那么为了保证这种原则,就得有确保借和贷的登记要么同时成功,要么同时失败。

  如果出现只记录了借,或者只记录了贷,那么就违反了记帐原则,就会出现记错帐的情况。SQL Server通过支持事务机制管理多个事务,保证事务的一致性。事务使用锁,防止其他用户修改另外一个还没有完成的事务中的数据。对于多用户系统来说,锁机制是必须的。在SQL Server 7.0中,使用事务日志来保证修改的完整性和可恢复性。

  SQL Server有多种锁,允许事务锁定不同的资源。锁就是保护指定的资源,不被其他事务操作。为了最小化锁的成本,SQL Server自动地以与任务相应等级的锁来锁定资源对象。锁定比较小的对象,例如锁定行,虽然可以提高并发性,但是却有较高的开支,因为如果锁定许多行,那么需要占有更多的锁。锁定比较大的对象,例如锁定表,会大大降低并发性,因为锁定整个表就限制了其他事务访问该表的其他部分,但是成本开支比较低,因为只需维护比较少的锁。

  事务和锁具有以下特点:

  事务是一个单元的工作,要么全做,要么全不做
  事务保证操作的一致性和可恢复性
  每一条Transact-SQL语句都可以是一个事务
  实际使用的事务是用户定义的事务,它包括一系列操作或者语句
  在多服务器环境中,使用用户定义的分布式事务,保证操作的一致性
  锁是保证并发控制的手段
  可以锁定的资源包括行、页、簇、表和数据库
  锁的类型主要包括共享锁和排它锁
  特殊类型的锁包括意图锁、修改锁和模式锁 
  共享锁允许其他事务继续使用锁定的资源
  排它锁只允许一个事务访问数据
  系统本身可以处理死锁
  用户可以根据实际情况定制锁的一些特征 

  事务的定义

  事务是指一个单元的工作,这些工作要么全做,要么全部不做。作为一个逻辑单元,必须具备四个属性:自动性、一致性、独立性和持久性。自动性是指事务必须是一个自动的单元工作,要么执行全部数据的修改,要么全部数据的修改都不执行。

  一致性是指当事务完成时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性。所有的内部数据结构,例如树状的索引与数据之间的链接,在事务结束之后,必须保证正确。

  独立性是指并行事务的修改必须与其他并行事务的修改相互独立。一个事务看到的数据要么是另外一个事务修改这些事务之前的状态,要么是第二个事务已经修改完成的数据,但是这个事务不能看到正在修改的数据。这种特征也称为串行性。持久性是指当一个事务完成之后,它的影响永久性的产生在系统中,也就是这种修改写到了数据库中。

事务机制保证一组数据的修改要么全部执行,要么全部不执行。SQL Server使用事务保证数据的一致性和确保在系统失败时的可恢复性。事务是一个可以恢复的单元的工作,由一条或者多条Transact-SQL语句组成,可以影响到表中的一行或者多行数据。事务打开以后,直到事务成功完成之后提交为止,或者到事务执行失败全部取消或者滚回去为止。

 

  ****事务的工作原理图

  事务确保数据的一致性和可恢复性。事务的工作原理如图1所示。

                       

                                                                                        图1 事务的工作原理图

 

  事务开始之后,事务所有的操作都陆续写到事务日志中。写到日志中的操作,一般有两种:一种是针对数据的操作,一种是针对任务的操作。针对数据的操作,例如插入、删除和修改,这是典型的事务操作,这些操作的对象是大量的数据。有些操作是针对任务的,例如创建索引,这些任务操作在事务日志中记录一个标志,用于表示执行了这种操作。

  当取消这种事务时,系统自动执行这种操作的反操作,保证系统的一致性。系统自动生成一个检查点机制,这个检查点周期地发生。检查点的周期是系统根据用户定义的时间间隔和系统活动的频度由系统自动计算出来的时间间隔。检查点周期地检查事务日志,如果在事务日志中,事务全部完成,那么检查点将事务日志中的事务提交到数据库中,并且在事务日志中做一个检查点提交标记。

  如果在事务日志中,事务没有完成,那么检查点将事务日志中的事务不提交到数据库中,并且在事务日志中做一个检查点未提交标记。事务的恢复以及检查点保护系统的完整和可恢复,可以使用如图2所示的示例说明。

                                

图2 事务恢复和检查点示例

        在这个示例图中,有五个事务:事务1、事务2、事务3、事务4和事务5。方框表示事务的开始和完成提交。水平方向表示时间。检查点表示在某一时间点发生检查点机制,系统失败表示在某一时间点由于断电、系统软件失败等原因而发生的系统失败。

  事务1的完成发生在检查点发生之间,所以事务1被提交到数据库中。事务2和事务4的完成发生在系统失败之前,所以这两个事务可以被系统向前滚动提交到数据库中。事务3和事务5由于系统失败而没有完成,所以这两个事务被取消。


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

一 数据库事务处理中出现的数据不一致的情况  在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有四种问题,归结如下: 1、丢失更新   如果两个事务...
  • flyingfalcon
  • flyingfalcon
  • 2016年11月05日 15:29
  • 3922

数据库中的事务和锁(乐观、悲观锁,共享、排他锁,死锁)

并发控制: 事务和锁的存在都是为了更好的解决并发访问造成的数据不一致性的的问题 乐观锁和悲观锁都是为了解决并发控制问题, 乐观锁可以认为是一种在最后提交的时候检测冲突的手段,而悲观锁则是一种避免冲突...
  • woshiluoye9
  • woshiluoye9
  • 2017年04月02日 22:22
  • 1786

事务、数据库事务、事务隔离级别、锁的简单总结

一、数据库事务 1、事务是作为单个逻辑工作单元执行的一系列操作。可以是一条SQL语句也可以是多条SQL语句。 2、事务具有四个特性  原子性(Atomicity):事务中的全部操作在数据库中是不可分...
  • zootial
  • zootial
  • 2014年12月25日 14:21
  • 3720

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

一 数据库事务处理中出现的数据不一致的情况 在多个事务并发做数据库操作的时候,如果没有有效的避免机制,就会出现种种问题。大体上有四种问题,归结如下: 1、丢失更新   如果两个事务都要...
  • oNianShao
  • oNianShao
  • 2017年06月20日 14:37
  • 145

数据库事务中的隔离级别和锁+spring Transactional注解

数据库事务中的隔离级别和锁数据库事务在后端开发中占非常重要的地位,如何确保数据读取的正确性、安全性也是我们需要研究的问题。 ACID 首先总结一下数据库事务正确执行的四个要素(ACID):原子性(...
  • qq_39266910
  • qq_39266910
  • 2017年12月17日 11:18
  • 80

数据库事务与锁的关系

原文:http://blog.csdn.net/dreamwbt/article/details/53371687 概述:数据库操作具有四个特性:原子性,隔离性,持久性,一致性。当多个线程操作同...
  • ljj2312
  • ljj2312
  • 2017年12月20日 11:03
  • 45

数据库事务、并发、锁那些事

对数据库学习的不断深入,对游标的认识也在逐渐加深,游标与事务、锁有着密不可分的关系。 无论是事务、锁还是游标相对于数据库来说最主要目的是保证数据的完整性。对事务并发、锁定的深入学习才能更加完善对游...
  • nicajonh
  • nicajonh
  • 2017年02月08日 17:06
  • 324

数据库事务与锁详解

什么是事务(Transaction)?是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源...
  • aluomaidi
  • aluomaidi
  • 2016年09月07日 16:31
  • 2679

数据库事务、锁

事务特征第一、原子性,即不可分割性; 第二、一致性,保证数据更新前后与业务的一致性; 第三、隔离性,多个事务不相影响; 第四、持久性,事务提交后数据将永久存储杂数据库。隔离级别读未提交 一个事...
  • zly9923218
  • zly9923218
  • 2016年04月17日 11:18
  • 417

MySQL数据库事务锁等待:Lock wait timeout exceeded; try restarting transaction

当在操作mysql数据库的表数据时,发现更新某表的xx字段时,系统老是提示“Lock wait timeout exceeded; try restarting transaction”错误。一般情况...
  • u011389474
  • u011389474
  • 2016年12月05日 18:03
  • 1695
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库事务和锁
举报原因:
原因补充:

(最多只允许输入30个字)