`
ericxu131
  • 浏览: 188389 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据库的事务和锁

阅读更多
一个要有事务属性的数据库需要具有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)
悲观锁对数据库系统的自动管理不感冒,需要程序员直接管理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。

分享到:
评论

相关推荐

    [数据库事务与锁]详解七 深入理解乐观锁与悲观锁

    [数据库事务与锁]详解七 深入理解乐观锁与悲观锁

    数据库安全事务与锁数据库安全事务与锁

    数据库安全事务与锁数据库安全事务与锁数据库安全事务与锁

    数据库中事务和锁.ppt

    在数据库管理系统中,事务和锁是两个至关重要的概念,它们主要用于保证数据的一致性和完整性,以及在多用户环境下的并发访问控制。 事务是数据库操作的基本单位,它封装了一组数据库操作,这些操作要么全部执行,...

    数据库事务、hibernate悲观锁和乐观锁

    数据库事务是数据库操作的核心组成部分,它确保了数据的一致性和完整性。事务是由一系列数据库操作组成的逻辑单元,这些操作要么全部成功执行,要么全部不执行,遵循ACID(原子性、一致性、隔离性和持久性)原则。 ...

    数据库事务及锁机制面试题

    并发处理带来的问题中,更新丢失可以完全避免,由应用对数据加锁即可。脏读、不可重读度、幻读,其实都是数据库的一致性问题,...我们的数据库锁,就是为了构建这些隔离级别存在的。mysql默认的隔离级别为可重复读。

    sybase数据库查被锁的表.doc

    锁机制可以在不同的粒度上生效,包括表锁、页锁和行锁。 锁表查询是指通过查询数据库锁信息来了解当前数据库中的锁状态。锁表查询可以帮助数据库管理员了解当前数据库中的锁情况,从而进行锁优化和故障诊断。 下面...

    数据库事务管理及锁.xmind

    数据库事务管理及锁机制原理剖析:包括事务特性 ACID、数据隔离级别、事务实现的原理、锁机制,及过程中可能遇到的查询效率及死锁问题等

    MS SQL Server数据库事务锁机制分析

    MS SQL Server 数据库的事务锁机制是确保数据库完整性和一致性的关键组成部分,它涉及到多用户环境下的并发控制和数据安全。锁是一种软件机制,用于防止多个用户在同一时间对同一资源进行冲突操作,确保数据的一致性...

    浅析SQL Server数据库事务锁机制.pdf

    浅析SQL Server数据库事务锁机制.pdf

    数据库锁和事务的详细讲解

    详细描述数据库锁和事务的内容,其中包括各种类型的锁的讲述,事务的控制

    数据库之事务调优

    数据库之事务调优是数据库管理中的一个重要环节,它关乎到系统的性能、稳定性和并发处理能力。事务是数据库操作的基本单位,确保数据的一致性、...通过这些方法,我们可以构建出一个高效、稳定的数据库事务处理系统。

    事务和锁(数据库开发必备)

    5. **页级锁(Page-Level Locks)**:锁定数据库的一页数据,介于行级锁和表级锁之间。 6. **死锁(Deadlock)**:当两个或更多事务相互等待对方释放资源而形成的一种僵局,需要通过特定算法来检测和解决。 在实际...

    数据库中锁机制的学习

    Oracle数据库使用行级锁和块级锁,并提供一种称为Next-Key Locks的机制,防止幻读问题。 总的来说,数据库中的锁机制是保证数据安全和事务正确执行的关键。通过理解不同类型的锁和它们在不同隔离级别下的行为,...

    查看数据库的锁以及事务锁表的超时的调查

    博客的代码,查看当前导致数据库锁的具体sql语句,调查代码逻辑死锁导致数据库超时的例子,对应的博客文章位置http://blog.csdn.net/pfe_nova/article/details/9055981 注意将代码配置文件的连接字符串改成自己实际...

    数据库事务管理数据库事务管理.ppt

    总的来说,数据库事务管理涉及事务的定义、状态管理、ACID特性的实现以及并发控制策略,如封锁协议,这些都是保证数据库在多用户环境下的正确性和可靠性的核心组成部分。通过精细的事务管理和有效的并发控制,数据库...

    java模拟数据库事务

    在模拟数据库事务时,可能会用到这些机制来管理事务间的隔离级别,如读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。 4) **Java设计模式**:在...

    数据库系统工程师-06事务和锁.zip

    数据库还可能使用意向锁(IS锁和IX锁),用于表示事务打算加何种类型的锁,以协调多行操作。 在数据库中,锁的粒度可以是行级、页级、表级甚至数据库级。行级锁提供高并发,但可能导致更多的锁冲突;表级锁则降低了...

    SQL Server 的事务和锁

    SQL Server的事务和锁是数据库管理系统中至关重要的概念,它们保证了数据的一致性和完整性,为多用户环境下的并发操作提供了保障。以下是对这些主题的详细解析: **SQL事务** SQL事务是数据库操作的基本单元,它...

    数据库事务PPT课件.ppt

    封锁协议是指在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议。不同的封锁协议可以在不同的程度上为并发操作的正确调度提供一定的保证。例如一级封锁协议、二级封锁协议、三级封锁协议等。 ...

Global site tag (gtag.js) - Google Analytics