zoukankan      html  css  js  c++  java
  • 悲观锁和事务处理并发冲突

    1.在一个查询窗口运行以下代码

    BEGIN TRANSACTION;
    GO
        
    select *  from SK_Product WITH(HOLDLOCK)  where ProId=47;
        
    WAITFOR DELAY '00:00:30';
        
    select *  from SK_Product where ProId=47;
    GO
    COMMIT TRANSACTION;
    2.在一个新的查询窗口运行以下代码

    UPDATE [Laptop].[dbo].[SK_Product]
       
    SET [ProName] = [ProName]+ '   12'
     
    WHERE ProId=47
    GO
    select *  from SK_Product where ProId=47;

     观察结果 发现第一个窗口中的两条select显示的数据都是未修改前的数据,第二个窗口在等待第一个窗口中的代码执行完后才得以执行,第二个窗口中的select显示的是修改后的数据

     这种方式时间上是限制并发,因为其独占性造成请求必须按先后顺序执行 ,效率比较低下。

     3.两个锁定区别
    SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 
    SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除

    4.
     执行 EXEC SP_LOCK 报告有关锁的信息

     查询分析器中按Ctrl+2可以看到锁的信息


    5.何锁一个表的某一行 
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
    SELECT * FROM table ROWLOCK WHERE id = 1 
     

  • 相关阅读:
    表单文件上传
    页面布局
    HDU 2089 不要62
    洛谷 P1776 宝物筛选(多重背包)
    HDU 5569 matrix
    洛谷 P1244 青蛙过河
    洛谷 P2362 围栏木桩
    洛谷 P2719 搞笑世界杯
    洛谷 P1877 [HAOI2012]音量调节
    洛谷 P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…
  • 原文地址:https://www.cnblogs.com/zyip/p/1861188.html
Copyright © 2011-2022 走看看