温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

sqlserver锁表的六种语法及with nolock的说明

发布时间:2020-08-10 21:29:45 阅读:415 作者:lusklusklusk 栏目:关系型数据库
亿速云云数据库,读写分离,安全稳定,弹性扩容,低至0.3元/天!! 点击查看>>

官方文档https://docs.microsoft.com/zh-cn/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-2017

TABLOCKX

SELECT * FROM table WITH (TABLOCKX)

查询过程中,其他会话无法查询、更新此表,直到查询过程结束

XLOCK

SELECT * FROM table WITH (XLOCK)

查询过程中,其他会话无法查询、更新此表,直到查询过程结束

UPDLOCK

SELECT * FROM table WITH (UPDLOCK)

查询过程中,其他会话可以查询,但是无法更新此表,直到查询过程结束

TABLOCK

SELECT * FROM table WITH (TABLOCK)

查询过程中,其他会话可以查询,但是无法更新此表,直到查询过程结束

HOLDLOCK

SELECT * FROM table WITH (HOLDLOCK)

查询过程中,其他会话可以查询,但是无法更新此表,直到查询过程结束

NOLOCK

SELECT * FROM table WITH (NOLOCK)

查询过程中,其他会话可以查询、更新此表

NOLOCK、(NOLOCK)、 WITH(NOLOCK)的区别:

SELECT * FROM TEST1 NOLOCK

SELECT * FROM TEST1 (NOLOCK);

SELECT * FROM TEST1 WITH(NOLOCK);

1: NOLOCK其实只是当成了表的别名,没有任何实质作用。

2:(NOLOCK)与WITH(NOLOCK)功能上是一样的,(NOLOCK)是WITH(NOLOCK)的别名

TEST1的数据如下

SELECT * FROM TEST1;

hid   hid2

1      10001

2      10002

会话1

BEGIN TRAN

UPDATE TEST1 SET hid=9 WHERE hid =1;

会话2 堵塞了

SELECT * FROM TEST1;

会话3 堵塞了

SELECT * FROM TEST1 NOLOCK;

会话4 正常,但是查询到的数据是脏数据,hid=9是没有提交也没有回滚的数据

SELECT * FROM TEST1 with(nolock);

hid   hid2

9      10001

2      10002

SELECT * FROM TEST1 (nolock);

hid   hid2

9      10001

2      10002

亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:http://blog.itpub.net/30126024/viewspace-2645984/

AI

开发者交流群×