返回顶部
首页 > 资讯 > 数据库 >SQLServer2005数据库中如何使用nolock
  • 404
分享到

SQLServer2005数据库中如何使用nolock

2024-04-02 19:04:59 404人浏览 八月长安
摘要

这篇文章给大家介绍sqlServer2005数据库中如何使用nolock,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  SQLServer2005数据库nolock怎么使用  并发访

这篇文章给大家介绍sqlServer2005数据库中如何使用nolock,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

  SQLServer2005数据库nolock怎么使用

  并发访问:同一时间有多个用户访问同一资源,并发用户中假如有用户对资源做了修改,此时就会对其它用户产生某些不利的影响,例如:

  1:脏读:一个用户对一个资源做了修改,此时另外一个用户正好读取了这条被修改的记录,然后,第一个用户放弃修改,数据回到修改之前,这两个不同的结果就是脏读。

  2:不可重复读:一个用户的一个操作是一个事务,这个事务分两次读取同一条记录,假如第一次读取后,有另外用户修改了这个数据,然后第二次读取的数据正好是其它用户修改的数据,这样造成两次读取的记录不同,假如事务中定这条记录就可以避免。

  3:幻读:指用户读取一批记录的情况,用户两次查询同一条件的一批记录,第一次查询后,有其它用户对这批数据做了修改,方法可能是修改,删除,新增,第二次查询时,会发现第一次查询的记录条目有的不在第二次查询结果中,或者是第二次查询的条目不在第一次查询的内容中。

  为什么会在查询的表后面加nolock标识?为了避免并发访问产生的不利影响,SQLServer有两种并发访问的控制机制:锁、行版本控制,表后面加nolock是解决并发访问的方案之一。

  1>锁

  每个事务对所依赖的资源会请求不同类型的锁,它可以阻止其他事务以某种可能会导致事务请求锁出错的方式修改资源。当事务不再依赖锁定的资源时,锁将被释放。

  锁的类型:

  1:表类型:锁定整个表;

  2:行类型:锁定某个行;

  3:文件类型:锁定某个数据库文件;

  4:数据库类型:锁定整个数据库;

  5:页类型:锁定8K为单位的数据库页。

  锁的分类还有一种分法,就是按用户和数据库对象来分:

  1).从数据库系统的角度来看:分为独占锁(即排它锁),共享锁和更新锁。

  1:共享(S):用于不更改或不更新数据的操作(只读操作),一般常见的例如select语句。

  2:更新(U):用于可更新的资源中。防止当多个会话在读取、锁定以及随后可能进行的资源更新时发生常见形式的死锁。

  3:排它(X):用于数据修改操作,例如INSERT、UPDATE或DELETE。确保不会同时同一资源进行多重更新。

  2).从程序员的角度看:分为乐观锁和悲观锁。

  1:乐观锁:完全依靠数据库来管理锁的工作。

  2:悲观锁:程序员自己管理数据或对象上的锁处理。

  一般程序员一看到什么锁之类,觉的特别复杂,对专业的DBA当然是入门级知识了。可喜的是程序员不用去设置,控制这些锁,SQLServer通过设置事务的隔离级别自动管理锁的设置和控制。锁管理器通过查询分析器分析待执行的sql语句,来判断语句将会访问哪些资源,进行什么操作,然后结合设定的隔离级别自动分配管理需要用到的锁。

  2>:行版本控制

  当启用了基于行版本控制的隔离级别时,数据库引擎将维护修改的每一行的版本。应用程序可以指定事务使用行版本查看事务或查询开始时存在的数据,而不是使用锁保护所有读取。通过使用行版本控制,读取操作阻止其他事务的可能性将大大降低。也就是相当于针对所有的表在查询时都会加上nolock,同样会产生脏读的现象,但差别在于在一个统一管理的地方。说到了基于行版本控制的隔离级别,这里有必要说下隔离级别的概念。

  隔离级别的用处:控制锁的应用,即什么场景应用什么样的锁机制。

  最终目的:解决并发处理带来的种种问题。

  SQLServer2005数据库nolock怎么使用

  隔离级别的分类:

  1:未提交读,隔离事务的最低级别,只能保证不读取物理上损坏的数据;

  2:已提交读,数据库引擎的默认级;

  3:可重复读;

  4:可序列化;隔离事务的最高级别,事务之间完全隔离。

  小结:NOLOCK语句执行时不发出共享锁,允许脏读,等于READUNCOMMITTED事务隔离级别。NOLOCK确实在查询时能提高速度,但它并不是没有缺点的,起码它会引起脏读。

  nolock的使用场景(个人观点):

  1:数据量特别大的表,牺牲数据安全性来提升性能是可以考虑的;

  2:允许出现脏读现象的业务逻辑,反之一些数据完整性要求比较严格的场景就不合适了,像金融方面等。

  3:数据不经常修改的表,这样会省于锁定表的时间来大大加快查询速度。

  综上所述,假如在项目中的每个查询的表后面都加nolock,这种做法并不科学,起码特别费时间,不如行版本控制来的直接有效。而且会存在不可预期的技术问题。应该有选择性的挑选最适合的表来放弃共享锁的使用。

  nolock和with(nolock)的几个小区别:

  1.SQLServer2005中的同义词,只支持with(nolock);

  2.with(nolock)的写法非常容易再指定索引

  3.跨服务器查询语句时,不能用with(nolock)只能用nolock,同一个服务器查询时则with(nolock)和nolock都可以用。比如:select*from[IP].a.dbo.table1with(nolock)这样会提示错误,select*froma.dbo.table1with(nolock)这样就可以成功地查询。

关于SQLServer2005数据库中如何使用nolock就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: SQLServer2005数据库中如何使用nolock

本文链接: https://lsjlt.com/news/56803.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQLServer2005数据库中如何使用nolock
    这篇文章给大家介绍SQLServer2005数据库中如何使用nolock,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  SQLServer2005数据库nolock怎么使用  并发访...
    99+
    2024-04-02
  • 如何手动卸载SQLServer2005数据库
    这篇文章主要讲解了“如何手动卸载SQLServer2005数据库”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何手动卸载SQLServer2005数据库”...
    99+
    2024-04-02
  • SQLServer2005数据库游标调用函数的使用方法
    这篇文章主要讲解了“SQLServer2005数据库游标调用函数的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQLServer2005数据库游标...
    99+
    2024-04-02
  • SQLServer2005数据库中怎么实现批量更新
    这篇文章将为大家详细讲解有关SQLServer2005数据库中怎么实现批量更新,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。  SQLServer2005数...
    99+
    2024-04-02
  • Java中如何使用数据库
    在Java中使用数据库,需要进行以下步骤:1. 导入数据库驱动:首先需要导入相应的数据库驱动,以便在Java程序中与数据库进行交互。...
    99+
    2023-08-14
    Java 数据库
  • MySQL数据库中XML数据如何使用
    MySQL数据库中XML数据如何使用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  使用--xml选项将数据导出为XML格式...
    99+
    2024-04-02
  • mysql数据库如何使用数据库
    使用 mysql 数据库连接到数据库并创建数据库。选择数据库,创建表,并插入数据。使用查询从表中获取数据,并使用更新命令修改数据。使用删除命令删除数据,并管理用户和权限。定期备份和恢复数...
    99+
    2024-04-14
    mysql 数据丢失
  • SQLServer2005中怎么利用证书加密数据
    SQLServer2005中怎么利用证书加密数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  怎样在SQLServer2005中用证书...
    99+
    2024-04-02
  • 数据库中getdate函数如何使用
    在数据库中,GETDATE() 函数用于返回当前日期和时间。您可以在 SELECT 语句中使用 GETDATE() 函数来获取当前日...
    99+
    2024-04-08
    数据库
  • ASP中如何使用MySQL数据库
    这篇文章将为大家详细讲解有关ASP中如何使用MySQL数据库,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。ASP使用MySQL数据库实现方法有哪些  我的环...
    99+
    2024-04-02
  • 数据库中如何使用CREATE TABLESPACE
    这篇文章给大家分享的是有关数据库中如何使用CREATE TABLESPACE的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 一、官档BOOK → SQL Language Re...
    99+
    2024-04-02
  • Django中如何使用多数据库
    Django中如何使用多数据库,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.在settings中设定DATABASE比如要...
    99+
    2024-04-02
  • Android中如何使用SQLite数据库
    在Android中使用SQLite数据库需要进行以下步骤: 创建一个继承自SQLiteOpenHelper的帮助类来管理数据库的创...
    99+
    2024-04-09
    Android SQLite
  • SQLServer数据库中如何使用ISNULL函数
    SQLServer数据库中如何使用ISNULL函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  SQLServer数据库I...
    99+
    2024-04-02
  • MySQL 数据库中 CAST 函数如何使用?
    1:CAST函数       CAST 函数是 SQL 中的一种类型转换函数,它用于将一个数据类型转换为另一个数据类型。 2:常用的 CAST 函数的方法 2.1  将字符串转换为数字类型 CAST('123' AS INT) -- 将字符...
    99+
    2023-09-02
    java 开发语言
  • 数据库中的convert函数如何使用
    在数据库中,CONVERT函数用于将一个数据类型转换为另一个数据类型。它的语法通常如下:CONVERT(data_type, exp...
    99+
    2023-09-05
    数据库
  • 如何使用PHP修改数据库中的数据
    PHP是一种服务器端脚本语言,它在网站开发和动态网页生成方面广受欢迎。在PHP中,对数据进行修改是非常重要的一项操作。本文将介绍如何使用PHP对数据进行修改。连接数据库在PHP中使用mysql_connect()函数连接数据库。该函数需要根...
    99+
    2023-05-14
  • MySQL中information_schema数据库表如何使用
    今天就跟大家聊聊有关MySQL中information_schema数据库表如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 ...
    99+
    2024-04-02
  • MongoDB数据库中如何使用索引
    本篇文章为大家展示了MongoDB数据库中如何使用索引,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  MongoDB的各种索引有哪些用法  1.单列索引  在字段...
    99+
    2024-04-02
  • 在ASP中如何使用MYSQL数据库
    这篇文章给大家分享的是有关在ASP中如何使用MYSQL数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  我的环境是WINDOWS98+PWS4.0+mysql-3.23.3...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作