为什么我不能添加这个外键?

时间:2015-05-14 20:39:45

标签: sql sql-server

我只发布主要部分。我有两个表,每个表必须将另一个PK作为FK。

CREATE TABLE apartment
(
     cod_apartment INT NOT NULL PRIMARY KEY,
     cod_offer INT NOT NULL
);

CREATE TABLE offer
(
    cod_offer INT NOT NULL PRIMARY KEY,
    cod_apartment INT NOT NULL
);

首先我在两个表上插入值并且它正常工作,我甚至可以使用" select * from ..."进行搜索。但后来我尝试添加外键:

这很有用。

ALTER TABLE offer
ADD FOREIGN KEY (cod_apartment ) REFERENCES apartment;

而这不是。

ALTER TABLE apartment
ADD FOREIGN KEY (cod_offer) REFERENCES offer;

这是错误消息:

  

ALTER TABLE语句与FOREIGN KEY约束冲突" FK__apartment__cod_offer__6383C8BA"。冲突发生在数据库" kleber_apartment",table" dbo.offer",column' cod_offer'。

问题是,每次我尝试执行时,FK名称都会改变。而这个FK实际上并不存在。我已经删除了两个表并尝试再次插入值,但同样的情况也会发生。

可能是什么?

1 个答案:

答案 0 :(得分:6)

这意味着当现有数据不遵守该约束时,您尝试添加外键。因此,您的apartment表中有一条记录cod_offer列与cod_apartment表中的任何值都不匹配。

添加外键不仅会限制未来的数据,还需要任何现有数据都必须遵循该规则。

关于6383C8BA,无论何时添加约束而不给它命名,SQL Server都会为您选择一个。就个人而言,我建议像:

alter table dbo.apartment
add constraint FK_apartment__cod_offer
foreign key (cod_offer) references dbo.offer (cod_offer);

这使您可以按照自己的方式定义名称,并且可以更清楚地了解您实际构建的内容。