`
lvxiangjack
  • 浏览: 13458 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

数据库锁探究

阅读更多
执行SQL语句的时候发出什么样的锁呢,这就由事务的隔离级别决定了。一般情况,读语句(select)发出共享锁,写语句(update,insert,delete)发出排他锁。

①     READUNCOMMITTED:不发出锁

②     READCOMMITTED:发出共享锁,保持到读取结束

③     REPEATABLEREAD:发出共享锁,保持到事务结束

④     SERIALIZABLE:发出共享锁,保持到事务结束



①     NOLOCK:不发出锁。等同于READUNCOMMITTED

②     HOLDLOCK:发出共享锁,保持到事务结束。等同于SERIALIZABLE

③     XLOCK:发出排他锁,保持到事务结束。

④     UPDLOCK:发出更新锁,保持到事务事务结束。(更新锁:不阻塞别的事物,允许别的事物读数据(即更新锁可与共享锁兼容),但他确保自上次读取数据后数据没有被更新)



⑤     READPAST:发出共享锁,但跳过锁定行,它不会被阻塞。适用条件:提交读的隔离级别,行级锁,select语句中。

类型3

①     ROWLOCK:行级锁

②     PAGLOCK:页级锁

③     TABLOCK:表锁

④     TABLOCKX:表排他锁





新建一个存储过程来生成新的凭证编号,如下:

CREATE PROCEDURE up_getbh  AS

       Begin Tran

              Declare @numnewbh numeric(18,0)

              select  @numnewbh = bh FROM code  WITH (UPDLOCK,ROWLOCK) where pinzheng = '会计凭证'

              set @numnewbh = @numnewbh + 1

              update code set  bh = @numnewbh where pinzheng = '会计凭证'

              print @numnewbh

       Commit tran

GO



然后,打开查询分析器,并多开几个连接(笔者开了8个连接,模拟有8个人同时并发,读者可以开更多的连接进行试验),把类似以下这样的语句复制到每个连接窗口中,

declare @i numeric(18,0)

set @i = 1

while @i = 1

Begin

       if getdate() > '2004-07-22 14:23'  --设定一个时间,到此时间同时执行upgetbh存储过程

              set @i = 0     

end

exec up_getbh



由于up_getbh中的select语句使用了更新锁,因更新锁之间不能兼容,所以各个连接要等到所有其他的连接释放掉锁才能执行,而更新锁的释放要等到事务结束,这样就不会发生号出错的现象了。
分享到:
评论

相关推荐

    SQL Server数据库性能优化探究.pdf

    简短的事务有助于锁和回滚空间的快速释放,减少并发处理时的竞争,提升系统资源的利用效率。此外,对于需要进行自定义条件查询的大型数据表,应合理设定查询条件,避免不必要地返回大量数据,这样可以减轻数据库...

    SQLServer锁机制探究

    SQL Server的锁机制是数据库管理系统中用于确保数据一致性、避免并发操作冲突的重要机制。在高并发的数据库环境中,正确理解和使用锁是至关重要的,因为它直接影响到系统的性能和稳定性。 首先,我们需要了解SQL ...

    DB2数据库应用系统性能优化深入探究

    DB2数据库应用系统性能优化深入探究是一篇关于如何提升DB2数据库系统性能的文章。DB2是一种广泛应用的关系型数据库管理系统,其性能优化主要关注吞吐量、响应时间和并行能力。文章从四个方面进行了探讨: 1. **...

    并发访问ORACLE数据库的数据死锁分析和解决措施.pdf

    针对Oracle数据库的特点,其提供的锁机制包括共享锁和排它锁两种。共享锁允许多个事务并发读取资源,而排它锁确保某一事务独占访问,不允许并发读取。虽然这两种锁能确保数据的一致性,但在设计不当时也可能导致死锁...

    C和C++写的DBMS数据库

    6. **错误处理和恢复**:探究如何处理数据库中的错误,以及如何设计和实现故障恢复机制。 7. **性能优化**:分析数据库性能瓶颈,学习如何通过索引优化、查询优化等手段提升数据库的执行效率。 总之,这个项目为...

    sqlite数据库源代码

    6. **接口设计**: 探究SQLite提供给应用的API接口,了解如何在C/C++程序中使用SQLite进行数据库操作。 此外,源代码还涵盖了内存管理、错误处理、编译器技术(用于解析SQL语句)、测试框架等多个方面,对提升C语言...

    数据库复习资料

    综上所述,这份“数据库复习资料”将带领你深入探究数据库的各个方面,无论是基本概念、SQL语法,还是数据库设计、事务处理和安全性,都将助你在数据库学习的道路上更进一步。通过深入学习和实践,相信你可以更好地...

    mysql MySQL数据库开发优化与管理维护

    而第二部分则侧重于数据库性能的优化,包括SQL优化、数据库对象优化、锁问题处理以及服务器配置等方面。 #### 第一部分:开发篇 ##### 第1章 帮助的使用 - **按照层次看帮助**:介绍如何利用MySQL官方文档和其他...

    AR人脸数据库,BMP和MAT格式

    AR人脸数据库是一个广泛用于人脸识别研究和开发的数据集,由Purdue大学的研究团队创建。...通过这个数据库,研究人员可以深入探究人脸识别的挑战,推动相关技术的进步,为我们的日常生活带来更多的便利和安全。

    微博支付-高并发场景下数据一致性问题探究.pdf

    在高并发下,合理的编程实践,如避免死锁、合理设置事务隔离级别,以及利用锁机制(乐观锁、悲观锁)都是保障数据一致性的关键。 总结来说,解决高并发场景下的数据一致性问题需要综合运用多种技术和策略,包括但不...

    机器学习在数据库运维上的应用.pptx

    3. **实时响应**:快速识别异常指标,如延迟、SQL锁和连接问题,并及时修复。 4. **服务分类**:通过对数据库服务特征的检测和分类,优化服务质量和效率。 ### 四、智能诊断流程 1. **指标识别**:确定影响系统...

    oracle基本原理及理论分析深度探究

    2. 锁机制:Oracle通过行级锁、表级锁和行级共享锁等来实现并发控制,防止数据冲突。 四、Oracle查询优化 1. 索引:索引加速数据检索,Oracle支持B树索引、位图索引、函数索引等多种类型。 2. 查询优化器:Oracle的...

    地区电力调度自动化AVC闭环控制安全策略探究.pdf

    通过220kV主变高压侧的分层分区处理,结合数据库与网络模型,AVC系统建立厂站、控制设备记录的关联性,与EMS(能量管理系统)协同运转,并使用增量更新算法来构建和验证自动监控模型。 2. AVC闭环控制安全策略的...

    Postgresql主从异步流复制方案的深入探究

    **PostgreSQL主从异步流复制方案的深入探究** 在数据库管理中,主从复制是一种常用的高可用性和灾难恢复策略。PostgreSQL自9.0版本起引入了流复制功能,使得从服务器能够实时地从主服务器接收并应用WAL(Write-...

    循序渐进DB2.DBA系统管理、运维与应用案例

    客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...

    循序渐进DB2.DBA系统管理、运维与应用案例.part1

    客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...

    循序渐进DB2.DBA系统管理、运维与应用案例.part2

    客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...

    2018各省最新写锁

    这项技术的普及和应用,不仅能够帮助企业和机构保护敏感数据不被未授权访问,而且还能维护系统数据的一致性和完整性,尤其在数据库管理、操作系统内核以及软件开发等多个领域中扮演着关键角色。 以“2018各省最新写...

    牛新庄: 循序渐进DB2:DBA系统管理、运维与应用案例 002

    客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...

    牛新庄: 循序渐进DB2:DBA系统管理、运维与应用案例 001

    客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...

Global site tag (gtag.js) - Google Analytics