我发现了这个问题: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)