数据库的事务和锁

一个要有事务属性的数据库需要具有ACID的特性

ACID,指数据库的不可部分完成性(又称「原子性」,Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持交易(Transaction)的数据库系统,必需要具有这四种特性,否则在交易过程(Transaction processing)当中,无法保证数据的正确性。

[b]原子性[/b]就是比如我给我妈转账钱,我这里扣100,她那里加100,要是中间突然停电了两个人的账户上的钱都要回滚成转账以前的。

[b]一致性[/b]就是我转给我妈100块,我帐户里要扣100,我妈帐户要加100,不能我这里扣50,我妈那里加100。

[b]隔离性[/b]就是为了保证事务并发时候数据不出错。

[b]持久性[/b]就是转账完成以后我这里就永久的扣了100而我妈那里就永久的加了100元不会再变了。

为了保证事务的隔离性数据库会采用锁机制
锁(Lock) 是在多用户环境下对资源访问的一种限制。机制当对一个数据源加锁后,此数据源就有了一定的访问限制。我们就称对此数据源进行了“锁定”。

在SQL Server中,可以对以下的对象进行锁定:
数据行(Row):数据页中的单行数据;
索引行(Key):索引页中的单行数据,即索引的键值;
页(Page):页是SQL Server 存取数据的基本单位,其大小为8KB; 盘区(Extent):一个盘区由8 个连续的页组成;
表(Table);
数据库(Database)。

从数据库系统的角度来看锁分为以下三种类型:
[b]独占锁(Exclusive Lock)[/b]
  独占锁锁定的资源只允许进行锁定操作的程序使用,其它任何对它的操作均不会被接受。执行数据更新命令,即INSERT、 UPDATE 或DELETE 命令时,SQL Server 会自动使用独占锁。但当对象上有其它锁存在时,无法对其加独占锁。独占锁一直到事务结束才能被释放。

[b]共享锁(Shared Lock)[/b]
  共享锁锁定的资源可以被其它用户读取,但其它用户不能修改它。在SELECT 命令执行时,SQL Server 通常会对对象进行共享锁锁定。通常加共享锁的数据页被读取完毕后,共享锁就会立即被释放。

[b]更新锁(Update Lock)[/b]
  更新锁是为了防止死锁而设立的。当SQL Server 准备更新数据时,它首先对数据对象作更新锁锁定,这样数据将不能被修改,但可以读取。等到SQL Server 确定要进行更新数据操作时,它会自动将更新锁换为独占锁。但当对象上有其它锁存在时,无法对其作更新锁锁定。

从程序员的角度看锁分为以下两种类型:
[b]乐观锁(Optimistic Lock)[/b]
乐观锁假定在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁、即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时SQL Server会自动对事务处理范围内更新到的表做锁定。 参考资料:[url=http://ericxu131.iteye.com/blog/176758]spring里面事务的传播属性和事务隔离级别(复习)[/url]里面的事务的隔离级别

[b]悲观锁(Pessimistic Lock)[/b]
悲观锁对数据库系统的自动管理不感冒,需要程序员直接管理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值