我以这种方式创建了一个表(简化):
CREATE TABLE [dbo].[values](
[id] [uniqueidentifier] NOT NULL,
[parentId] [uniqueidentifier] NULL
)
ALTER TABLE [dbo].[values] ADD CONSTRAINT [x] FOREIGN KEY([parentId])
REFERENCES [dbo].[values] ([id])
此表包含 3000 行。
如果我执行以下查询:
SELECT *
FROM values
WHERE parentId IS NOT NULL
AND parentId NOT IN (SELECT id FROM values)
我得到 800 个结果。
这怎么可能呢 ?
插入数据时,外键有效,无法插入表中找不到的parentId的东西。但是为什么允许已经存在的数据不连贯呢?
我想外键是用表中已经存在的数据添加的,但是在添加时,它不应该因为一致性原因而被拒绝吗?