Sql Server锁表LOCK设置
2016-01-15 15:26
525 查看
Sql Server锁表就限制不同的事物在同一时间内不允许同时操作一张表,实例很简单,可以用select来锁定整张表,那别人就不可能更新或是读取表的记录。
select*from dbo.Employee with(holdlock);with关键字来设置锁表的方式。
下面是with括号内关键字的书名:
NOLOCK(不加锁)
此选项被选中时,SQL Server在读取或修改数据时不加任何锁。在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据,即所谓的"脏数据"。
HOLDLOCK(保持锁)
此选项被选中时,SQL Server会将此共享锁保持至整个事务结束,而不会在途中释放。
UPDLOCK(修改锁)
此选项被选中时,SQL Server在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。
TABLOCK(表锁)
此选项被选中时,SQL Server将在整个表上置共享锁直至该命令结束。这个选项保证其他进程只能读取而不能修改数据。
PAGLOCK(页锁)
此选项为默认选项,当被选中时,SQL Server使用共享页锁。
TABLOCKX(排它表锁)
此选项被选中时,SQL Server将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。
HOLDLOCK持有共享锁,直到整个事务完成,应该在被锁对象不需要时立即释放,等于SERIALIZABLE事务隔离级别
NOLOCK语句执行时不发出共享锁,允许脏读,等于READ UNCOMMITTED事务隔离级别
对于tabllockx,在事物未提交前,连读取都是阻塞的,直到另一事物提交后才可以读取,这样就保证了数据的一致性。
select*from dbo.Employee with(holdlock);with关键字来设置锁表的方式。
下面是with括号内关键字的书名:
NOLOCK(不加锁)
此选项被选中时,SQL Server在读取或修改数据时不加任何锁。在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据,即所谓的"脏数据"。
HOLDLOCK(保持锁)
此选项被选中时,SQL Server会将此共享锁保持至整个事务结束,而不会在途中释放。
UPDLOCK(修改锁)
此选项被选中时,SQL Server在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。
TABLOCK(表锁)
此选项被选中时,SQL Server将在整个表上置共享锁直至该命令结束。这个选项保证其他进程只能读取而不能修改数据。
PAGLOCK(页锁)
此选项为默认选项,当被选中时,SQL Server使用共享页锁。
TABLOCKX(排它表锁)
此选项被选中时,SQL Server将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。
HOLDLOCK持有共享锁,直到整个事务完成,应该在被锁对象不需要时立即释放,等于SERIALIZABLE事务隔离级别
NOLOCK语句执行时不发出共享锁,允许脏读,等于READ UNCOMMITTED事务隔离级别
对于tabllockx,在事物未提交前,连读取都是阻塞的,直到另一事物提交后才可以读取,这样就保证了数据的一致性。
相关文章推荐
- mongodb集群搭建-分片
- sql SELECT时的with(nolock)选项说明
- leveldb代码阅读(16)——流程分析:打开数据库(详细版本)
- oracle nvl和nvl2的区别
- Redis数据备份与恢复
- django集成已有的数据库
- 无效的列类型: getInt not implemented for class oracle.jdbc.driver.T4CRowidAccessor
- redis研究笔记
- leveldb代码阅读(12)——数据库日志文件格式
- SQL Server 2016 执行卷维护任务
- SQL存储过程
- mysql学习(1):win_64位下载,安装,配置mysql-5-winx64详细步骤
- Redis数据类型与基本操作
- 存储过程(自动备份数据)
- iOS即时通讯 安装MySQL
- MySQL主从复制--MySQL5.5异步、半同步配置以及复制过滤实现
- oracle入门
- 基于nginx tomcat redis分布式web应用的session共享配置
- oracle入门
- oracle运用(四) oracle数据库NUMBER类型详解