我有 3 张桌子:
架构:
例如,我有如下数据:
1> select id, iddep, idservice from transactions where id = 22
2> go
id iddep idservice
----------- ----------- -----------
22 6 12
我运行以下查询,结果是可预测的:
首次连接查询:
1> begin tran
2> go
1> select id from transactions with (updlock) where id = 22
2> go
id
-----------
22
第二次连接查询:
1> begin tran
2> go
1> delete from transactions with (nowait) where id = 22
2> go
SQL Server Error: 1222 Lock request time out period exceeded
这是 NOWAIT 提示的正常行为,此处描述的内容
但!如果我做以下查询,结果很奇怪!
第一个连接查询与第一个示例中的相同:
1> begin tran
2> go
1> select id from transactions with (updlock) where id = 22
2> go
id
-----------
22
第二次连接查询:
1> begin tran
2> go
1> delete from services with (nowait) where id = 12
2> go
我只是尝试删除父行并且..没有任何反应!nowait
尽管有提示,它只是等待行释放。当我释放该行时,父行将被删除。
那么,为什么我不像第一个示例那样只收到 1222 错误?