二 锁的隔离级别
ISO 标准定义了下列隔离级别,SQL Server 数据库引擎支持所有这些隔离级别:
三 锁的分类
1. 从数据库系统的角度来看,分为以下锁模式。
SQL Server 数据库引擎使用不同的锁模式锁定资源,这些锁模式确定了并发事务访问资源的方式。
下表显示了SQL Server 数据库引擎使用的资源锁模式。
2. 从程序员的角度看:分为乐观锁和悲观锁。
乐观锁:完全依靠数据库来管理锁的工作。
悲观锁:程序员自己管理数据或对象上的锁处理。
MS-SQLSERVER 使用锁在多个同时在数据库内执行修改的用户间实现悲观并发控制
四 锁的粒度 锁粒度是被封锁目标的大小,封锁粒度小则并发性高,但开销大,封锁粒度大则并发性低但开销小 SQL Server支持的锁粒度可以分为为行、页、键、键范围、索引、表或数据库获取锁 资源 描述 RID 行标识符。用于单独锁定表中的一行。 键 索引中的行锁。用于保护可串行事务中的键范围。 页 8 千字节 (KB) 的数据页或索引页。 扩展盘区 相邻的八个数据页或索引页构成的一组。 表 包括所有数据和索引在内的整个表。 DB 数据库。
五【干货】常见锁的问题
1 如何锁一个表的某一行
* 事务未提交,该行处于锁死状态。当其它会话尝试更新id为1的行记录时,该会话处于等待状态2 锁定数据库的一个表
* 事务未提交,整个表处于锁死状态。当其它会话尝试更新表中记录时,该会话处于等待状态
加锁语句: MSSQL:
oracle:
加锁后其它人不可操作,直到加锁用户解锁,用commit或rollback解锁 几个例子帮助大家加深印象 设table1(A,B,C) A B C a1 b1 c1 a2 b2 c2 a3 b3 c3 1)排它锁 新建两个连接 在第一个连接中执行以下语句
在第二个连接中执行以下语句
若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒 2)共享锁 在第一个连接中执行以下语句
在第二个连接中执行以下语句
若同时执行上述两个语句,则第二个连接中的select查询可以执行 而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒 3)死锁 增设table2(D,E) D E d1 e1 d2 e2 在第一个连接中执行以下语句
在第二个连接中执行以下语句
同时执行,系统会检测出死锁,并中止进程
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/41250.html