sqlserver2000锁机制
做了一个查询,需要用到的数据来自一个大表,查询时指定的条件是两个日期,目的是将这两个日期的数据进行对比然后得到结果。为了增快查询速度,我把这两天的数据分别放到了t1和t2,然后用这两个表关联为一个视图v1,再拿v1去跟其它表、视图关联,得到一个可以查询出最终结果的v。在并发性比较大时,查询就会出问题,数据总是会乱掉,因为第一个查询更新好t1,t2后,还没有从v中查询出结果前,又有第二个查询过来,把t1,t2给更新了,第一个查询得到的结果可能就会是第二个查询想要的结果,也可能是谁都不想要的结果。 ?锁定数据库的一个表 SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 SELECT 语句中“加锁选项”的功能说明 SQL Server提供了强大而完备的锁机制来帮助实现数据库系统的并发性和高性能。用户既能使用SQL Server的缺省设置也可以在select 语句中使用“加锁选项”来实现预期的效果。 本文介绍了SELECT语句中的各项“加锁选项”以及相应的功能说明。 功能说明: NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁。 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Roll Back)中的数据,即所谓的“脏数据”。 HOLDLOCK(保持锁) 此选项被选中时,SQL Server 会将此共享锁保持至整个事务结束,而不会在途中释放。 UPDLOCK(修改锁) 此选项被选中时,SQL Server 在读取数据时使用修改锁来代替共享锁,并将此锁保持至整个事务或命令结束。使用此选项能够保证多个进程能同时读取数据但只有该进程能修改数据。 TABLOCK(表锁) 此选项被选中时,SQL Server 将在整个表上置共享锁直至该命令结束。 这个选项保证其他进程只能读取而不能修改数据。 PAGLOCK(页锁) 此选项为默认选项, 当被选中时,SQL Server 使用共享页锁。 TABLOCKX(排它表锁) 此选项被选中时,SQL Server 将在整个表上置排它锁直至该命令或事务结束。这将防止其他进程读取或修改表中的数据。 ? HOLDLOCK 持有共享锁,直到整个事务完成,应该在被锁对象不需要时立即释放,等于SERIALIZABLE事务隔离级别 注意: 锁定数据库的一个表的区别 SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Sqlserver 系统表sysobjects、syscolumns、systypes函数obj
- 使用mux Router – 如何将我的数据库传递给我的处理程序
- reporting-services – SSRS有条件地运行SQL / DataSet
- linq-to-sql – 在LINQ to SQL下管理不同开发人员的连接字符
- SQLSERVER内核架构剖析 (来探索数据库的架构思想)
- (MariaDB)MySQL数据类型和存储机制全面讲解
- SqlServer 分区
- sql-server – 将nvarchar值’test’转换为数据类型int时,转
- sqlserver 触发器学习(实现自动编号)
- 关于SQLServer2005的学习笔记——树形结构问题