一个要有事务属性的数据库需要具有ACID的特性
ACID,指数据库的不可部分完成性(又称「原子性」,Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持交易(Transaction)的数据库系统,必需要具有这四种特性,否则在交易过程(Transaction processing)当中,无法保证数据的正确性。
原子性就是比如我给我妈转账钱,我这里扣100,她那里加100,要是中间突然停电了两个人的账户上的钱都要回滚成转账以前的。
一致性就是我转给我妈100块,我帐户里要扣100,我妈帐户要加100,不能我这里扣50,我妈那里加100。
隔离性就是为了保证事务并发时候数据不出错。
持久性就是转账完成以后我这里就永久的扣了100而我妈那里就永久的加了100元不会再变了。
为了保证事务的隔离性数据库会采用锁机制
锁(Lock) 是在多用户环境下对资源访问的一种限制。机制当对一个数据源加锁后,此数据源就有了一定的访问限制。我们就称对此数据源进行了“锁定”。
在SQL Server中,可以对以下的对象进行锁定:
数据行(Row):数据页中的单行数据;
索引行(Key):索引页中的单行数据,即索引的键值;
页(Page):页是SQL Server 存取数据的基本单位,其大小为8KB; 盘区(Extent):一个盘区由8 个连续的页组成;
表(Table);
数据库(Database)。
从数据库系统的角度来看锁分为以下三种类型:
独占锁(Exclusive Lock)
独占锁锁定的资源只允许进行锁定操作的程序使用,其它任何对它的操作均不会被接受。执行数据更新命令,即INSERT、 UPDATE 或DELETE 命令时,SQL Server 会自动使用独占锁。但当对象上有其它锁存在时,无法对其加独占锁。独占锁一直到事务结束才能被释放。
共享锁(Shared Lock)
共享锁锁定的资源可以被其它用户读取,但其它用户不能修改它。在SELECT 命令执行时,SQL Server 通常会对对象进行共享锁锁定。通常加共享锁的数据页被读取完毕后,共享锁就会立即被释放。
更新锁(Update Lock)
更新锁是为了防止死锁而设立的。当SQL Server 准备更新数据时,它首先对数据对象作更新锁锁定,这样数据将不能被修改,但可以读取。等到SQL Server 确定要进行更新数据操作时,它会自动将更新锁换为独占锁。但当对象上有其它锁存在时,无法对其作更新锁锁定。
从程序员的角度看锁分为以下两种类型:
乐观锁(Optimistic Lock)
乐观锁假定在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁、即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时SQL Server会自动对事务处理范围内更新到的表做锁定。 参考资料:
spring里面事务的传播属性和事务隔离级别(复习)里面的事务的隔离级别
悲观锁(Pessimistic Lock)
悲观锁对数据库系统的自动管理不感冒,需要程序员直接管理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。
分享到:
相关推荐
[数据库事务与锁]详解七 深入理解乐观锁与悲观锁
数据库安全事务与锁数据库安全事务与锁数据库安全事务与锁
并发处理带来的问题中,更新丢失可以完全避免,由应用对数据加锁即可。脏读、不可重读度、幻读,其实都是数据库的一致性问题,...我们的数据库锁,就是为了构建这些隔离级别存在的。mysql默认的隔离级别为可重复读。
数据库事务管理及锁机制原理剖析:包括事务特性 ACID、数据隔离级别、事务实现的原理、锁机制,及过程中可能遇到的查询效率及死锁问题等
MS SQL Server数据库事务锁机制分析 MS SQL Server数据库事务锁机制分析
NULL 博文链接:https://cdxs2.iteye.com/blog/1938245
浅析SQL Server数据库事务锁机制.pdf
事务是单独的工作单元,也是一个操作序列,该单元中可以包含多个操作以完成一个完整的任务。
详细描述数据库锁和事务的内容,其中包括各种类型的锁的讲述,事务的控制
博客的代码,查看当前导致数据库锁的具体sql语句,调查代码逻辑死锁导致数据库超时的例子,对应的博客文章位置http://blog.csdn.net/pfe_nova/article/details/9055981 注意将代码配置文件的连接字符串改成自己实际...
介绍了MSSQLServer数据库的事务锁机制。
事务是一个逻辑工作单元,SQL Server 2005 提供了几种...本章主要介绍 SQL Server 2005数据库系统的事务和锁的基本概念,事务、批、锁的创建和使用,通过事务、批、锁监测系统和优化物理数据库的操作,以及作业的设置。
1. 并发访问:可以通过数据库事务的优化来解决,并发访问的控制可以通过锁机制来实现。 2. 事务处理:可以通过事务的优化来解决,例如,通过将事务分解为多个小的事务来减少锁表的时间。 3. 索引问题:可以通过索引...
MySQL数据库-事务、锁及SQL优化
数据库系统工程师考点分析-数据库系统工程师-06事务和锁.doc
这是一个关于银行的数据库的处理,模仿的是从账户1转账给...那就需要用到事务,如果没有一起执行,就回滚。这个代码比较简单,希望对大家有帮助,自己建立一个数据库bank,在里面建立一个表Account,两属性:Id,money.
数据库系统工程师_06事务和锁.pdf
数据库系统工程师-06事务和锁.docx
数据库系统工程师-06事务和锁.zip