通过在SQL Server上的单个表上同时执行UPDATE语句来实现死锁?

时间:2014-10-30 18:28:38

标签: sql sql-server sql-server-2008-r2 deadlock

我发现了这个问题:SQL Server deadlock between two update statements告诉我们作者只是在一个表上同时执行简单的UPDATE语句 遇到死锁>像这样:

update a
set some_column = 'somewhat',
    fk = 42 -- this is FK constraint to another table
where id = 1 -- PK

我们假设它是唯一正在执行的一种陈述,没有触发器或工作。

我尝试了各种案例,但无法重现。

有可能吗?请提供代码示例。

更新:我的代码示例不会重现此问题:

设置代码:

-- create tables
create table B
(
    id int primary key
)

create table A
(
    id int primary key,
    b_id int not null,
    int_field int
    foreign key (b_id) references B(id)
)

go

-- add some data
declare @i int = 0

while @i < 1000
begin
    insert into B
    values (@i)

    insert into A
    values (@i, @i, @i)

    set @i = @i + 1
end

工人&#39;代码(同时在至少两个会话中运行):

while 1=1
    update A
    set int_field = 1,
        b_id = ROUND(999 * RAND(), 0)
    where id = ROUND(999 * RAND(), 0)

0 个答案:

没有答案