数据库-锁(概念、分类、粒度)

(1)概念:

   数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更新操作。

(2)锁的分类:

共享(S)锁:多个事务可封锁一个共享页;任何事务都不能修改该页; 通常是该页被读取完毕,S锁立即被释放。 

排它(X)锁:仅允许一个事务封锁此页;其他任何事务必须等到X锁被释放才能对该页进行访问;X锁一直到事务结束才能被释放。 

更新(U)锁:更新锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。因为使用共享锁时,修改数据的操作分为两步,首先获得一个共享锁,读取数据,然后将共享锁升级为排它锁,然后再执行修改操作。这样如果同时有两个或多个事务同时对一个事务申请了共享锁,在修改数据的时候,这些事务都要将共享锁升级为排它锁。这时,这些事务都不会释放共享锁而是一直等待对方释放,这样就造成了死锁。如果一个数据在修改前直接申请更新锁,在数据修改的时候再升级为排它锁,就可以避免死锁。

(3)锁的粒度:

在sql server2000中锁是具有粒度的,即可以对不同的资源加锁。锁定在较小的粒度的资源(例如行)上可以增加系统的并发量但需要较大的系统开销,从而也会影响系统的性能,因为锁定的粒度较小则操作可能产生的锁的数量会增加;锁定在较大的粒度(例如表)就并发而言是相当昂贵的,因为锁定整个表限制了其它事务对表中任意部分进行访问,但要求的开销较低,因为需要维护的锁较少,所以在这里是一种互相制约的关系。

 Sql server2000中锁定的粒度包括 行、页、扩展盘区、表、库等资源。

  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
MySQL数据库使用来管理并发访问和操作数据的情况,以确保数据的一致性和完整性。下面是MySQL数据库中常见的类型: 1. 共享(Shared Lock):也称为读(Read Lock),多个事务可以同时持有共享,用于读取数据,防止其他事务对数据进行修改。共享之间不互斥,可以共享。 2. 排他(Exclusive Lock):也称为写(Write Lock),只有一个事务可以持有排他,用于修改数据,其他事务无法同时持有共享或排他。排他之间互斥,不可共享。 3. 记录(Record Lock):在InnoDB存储引擎中,对于操作的每一行数据都可以使用记录。记录是基于索引的,只针对被访问的数据行加,而不会对整个表加。 4. 表(Table Lock):在MyISAM存储引擎中使用的一种粒度较大的,对整个表进行加。当一个事务获取到表级后,其他事务无法对该表进行写操作,但可以进行读操作。 5. 行级(Row Lock):在InnoDB存储引擎中使用的一种粒度较小的,对每一行数据进行加。行级可以提供更好的并发性能,允许多个事务同时访问不同的行数据。 MySQL还支持其他类型的,如意向(Intention Lock)、自增(AUTO-INC Lock)等。的使用需要根据实际需求和业务场景来选择,合理地使用可以提高数据库的并发性和数据一致性。同时,过度使用也可能导致性能下降和死等问题,因此需要仔细评估和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值