• sql server 2000 中多用户同时操作一个表的问题


    今天在sql2000中做了如下测试:
    建立测试表table1,其中仅包含一个字段 ID int
    仅包括一条记录:0

    操作一、
    然后同时在查询分析器的两个窗口中执行下如下语句:

    declare @id int
    set @id = ( select max(id) from table1 )
    while @id < 20000
     begin
     set @id = @id + 1
     insert into table1 ( id ) select @id
     set @id = ( select max(id) from table1 ) 
     end

    目的在于测试当两个用户同时操作同一个表时的重复性操作
    结果:共得到21868条数据,其中1868条重复,重复率竟高达10%
    分析:原因在于未对操作语句进行任何的加锁机制

    操作二、
    加上了事务处理

    begin tran
    declare @id int


    set @id = ( select max(id) from table1 )
    while @id < 20000
     begin
     set @id = @id + 1
     insert into table1 ( id ) select @id
     set @id = ( select max(id) from table1 ) 
     end

    commit tran

    在两个的窗口同时执行
    结果:仅有一条记录重复

    操作三、
    在事务的基础上再添加锁机制

    begin tran
    declare @id int


    set @id = ( select max(id) from table1 )
    while @id < 40000
     begin
     set @id = @id + 1
     insert into table1 with (tablock) ( id )  select @id
     set @id = ( select max(id) from table1 ) 
     end

    commit tran

    结果:40000条数据无一重复

  • 相关阅读:
    每日总结19
    每日博客
    每日博客
    每日博客
    每日博客
    今日收获
    python 基础学习
    python 基础学习
    python 基本语法学习
    【Rust】格式化Formatting
  • 原文地址:https://www.cnblogs.com/Yinner/p/947462.html
Copyright © 2020-2023  润新知