执行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语句使用了更新锁,因更新锁之间不能兼容,所以各个连接要等到所有其他的连接释放掉锁才能执行,而更新锁的释放要等到事务结束,这样就不会发生号出错的现象了。
分享到:
相关推荐
客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...
客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...
客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...
客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...
客户端连通性、实例、数据库、表空间和缓冲池、数据移动、备份恢复、故障诊断、锁与并发,以及数据库安全都是本书关注的重点。在介绍这些DB2对象和概念的同时,作者尽可能从DBA日常工作的角度探究DB2数据库常规维护...
经典知识库:PostgreSQL中的锁 经典知识库:SQL条件等价改写秘笈 如何实现海量数据迁移及落地实践 如何通过APEX 实现标准化运维 如何通过APEX实现标准化运维sql 深入解析:oracle drop table purge内部原理及异常...
本书是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时...
从简到难,从网络通信探究分布式通信原理 基于消息方式的系统间通信 理解通信协议传输过程中的序列化和反序列化机制 基于框架的RPC通信技术 WebService/ApacheCXF RMI/Spring RMI Hession 传统RPC技术在大型...
│ 高并发编程第二阶段55讲、线程上下文类加载器以及数据库驱动案例分析.mp4 │ └─第三阶段 Java并发编程.png Java高并发第三阶段(JUC).png 高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解.mkv ...
│ 高并发编程第二阶段55讲、线程上下文类加载器以及数据库驱动案例分析.mp4 │ └─第三阶段 Java并发编程.png Java高并发第三阶段(JUC).png 高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解.mkv ...