Sak*_*o73 3 t-sql sql-server sql-server-2008
如果SQL Server 2008r2数据库同时接收子表和子表(通过外键约束相关)的更新语句,更新语句是否能够创建死锁情况?
注意基于注释:在这种情况下更新的字段不是关键字段,它们只是计数器字段.
谢谢.
是的你可以.这是证据:
--setup
use tempdb;
create table Parent (
ParentID int not null,
constraint PK_Parent primary key clustered (ParentId)
);
insert into Parent values (1), (2), (3);
create table Child (
ChildId int identity,
constraint PK_Child primary key clustered (ChildId),
ParentId int,
constraint FK_Child_Parent foreign key (ParentId)
references Parent (ParentId)
);
insert into Child (ParentId) values (2), (2), (3);
--in window 1
use tempdb;
begin tran;
update Child set ParentId = 1 where ParentId = 3;
--in window 2
use tempdb;
begin tran;
update Parent set ParentId = 4 where ParentId = 1;
--back in window 1
update Child set ParentId = 4 where ParentId = 2;
Run Code Online (Sandbox Code Playgroud)
我测试了这个并且能够产生死锁.