Sql Server使用记录

欢迎来到SQL 关键字用法

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

更新锁 UPDLOCK

SQL Server查询引擎会不允许其他读取者来获取更新锁,此时将能够有效的处理对应对应的行记录,但是会造成阻塞

  1. 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
    
  2. WAITFOR DELAY 等待延时时间

       WAITFOR DELAY '00:00:10' --等候10秒
    
  3. 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,就是读到无效的数据。

  1. WITH (NOLOCK) 脏读数据;

     SELECT * FROM dbo.Test WITH(NOLOCK)
     NOLOCK可以忽略锁,直接从数据库读取数据。这意味着可以避开锁,
     从而提高性能和扩展性。但同时也意味着代码出错的可能性存在。
     你可能会读取到运行事务正在处理的无须验证的未递交数据。 
     这种风险可以量化。
    
  2. 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';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值