SQL Server 使用记录
欢迎来到SQL 关键字用法
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
更新锁 UPDLOCK
SQL Server查询引擎会不允许其他读取者来获取更新锁,此时将能够有效的处理对应对应的行记录,但是会造成阻塞
-
UPDLOCK更新锁 ,同时执行下边sql,将删除两条不一样的数据,同一条数据会锁定,造成阻塞;
DECLARE @queueid INT --声明更新ID BEGIN TRAN TRAN1 --查询ID SELECT TOP 1 @queueid = Id FROM Test WITH (updlock) --打印ID PRINT 'processing queueid # ' + CAST(@queueid AS VARCHAR) --等候10秒 WAITFOR DELAY '00:00:10' --删除ID DELETE FROM Test WHERE Id = @queueid COMMIT
-
WAITFOR DELAY 等待延时时间
WAITFOR DELAY '00:00:10' --等候10秒
-
UPDLOCK+READPAST结合使用 语法;
处理并发更新时,就像处理队列数据一样,但是不会造成阻塞,此时将给予我们最好的性能。我们结合上述所讲,来查询出数据并删除对应数据且,不会出现重复删除情况且不会导致阻塞--声明ID DECLARE @queueid INT WHILE (SELECT COUNT(*) FROM Test WITH (UPDLOCK , READPAST )) >= 1 BEGIN BEGIN TRAN TRAN1 --查询ID SELECT TOP 1 @queueid = Id FROM Test WITH (UPDLOCK , READPAST ) --打印ID PRINT 'processing queueid # ' + CAST(@queueid AS VARCHAR) --等待10秒 WAITFOR DELAY '00:00:10' --删除ID DELETE FROM Test WHERE Id = @queueid COMMIT END
脏读数据NOLOCK
WITH (NOLOCK)的SQL SELECT有可能会造成Dirty Read,就是读到无效的数据。
-
WITH (NOLOCK) 脏读数据;
SELECT * FROM dbo.Test WITH(NOLOCK) NOLOCK可以忽略锁,直接从数据库读取数据。这意味着可以避开锁, 从而提高性能和扩展性。但同时也意味着代码出错的可能性存在。 你可能会读取到运行事务正在处理的无须验证的未递交数据。 这种风险可以量化。
-
ROWLOCK行级锁
UPDATE dbo.Test WITH (ROWLOCK) SET Username = 'admin' WHERE Username = 'football' ROWLOCK语法可以使用在SELECT,UPDATE和DELETE语句中, 不过 我习惯 仅仅在UPDATE和DELETE语句中使用。
关键3
关键4
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';