是否在未使用约束更新列的 SQL 更新语句上检查外键约束? (在 MS SQL Server 中)
假设我有几个包含以下列的表格:
OrderItems
- OrderItemID
- OrderItemTypeID (FK to a OrderItemTypeID column on another table called OrderItemTypes)
- ItemName
如果我只是更新
update [dbo].[OrderItems]
set [ItemName] = 'Product 3'
where [OrderItemID] = 2508
FK 约束会使用上面的更新语句进行查找/检查吗? (甚至认为更新不会改变该列的值?)
最佳答案
不,不检查外键。通过检查两个不同更新的执行计划很容易看出这一点。
create table a (
id int primary key
)
create table b (
id int,
fkid int
)
alter table b add foreign key (fkid) references a(id)
insert into a values (1)
insert into a values (2)
insert into b values (5,1) -- Seek on table a's PK
update b set id = 6 where id = 5 -- No seek on table a's PK
update b set fkid = 2 where id = 6 -- Seek on table a's PK
drop table b
drop table a
关于sql-server - 是否在未使用约束更新列的 SQL 更新语句上检查外键约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573933/