外键约束阻止插入



我想建立一个表,添加外键,然后将数据添加到表中,但它不允许我这样做。

我的两个测试表如下

CREATE TABLE tesa 
(
company_id INT UNIQUE,
first_name VARCHAR(20),
last_name VARCHAR(20)
)
CREATE TABLE testb 
(
company_id INT UNIQUE,
company_code VARCHAR(3),
policy_no INT
)

分别为测试表的第一个条目

tesa (1, dan, fitz) 
testb (1, abc, 2) 

这些是通过SQL Server Management Studio的"编辑前200行"输入的。命令。

然后使用 添加外键
ALTER TABLE tesa 
ADD CONSTRAINT FK_tesa_testb_id 
FOREIGN KEY (company_id) REFERENCES testb (company_id)  

这也被接受了。

我遇到的问题是,当我添加外键,然后尝试添加其他条目,甚至清除并重新输入已接受的两个条目时,我得到一个错误消息,说外键约束有问题。我在另一个系统上尝试了这个,它可以接受所有的信息,不确定这个问题是什么。

有了外键,您知道必须确保tesa中插入一些内容之前,testb中的条目与有效的company_id存在。

对于刚才展示的两个插入,必须运行

INSERT INTO testb (company_id, company_code, policy_no) 
VALUES (1, 'abc', 2) 

首先,以便存在company_id = 1中的testb条目,然后才能运行以下命令:

INSERT INTO tesa (company_id, first_name, last_name)
VALUES (1, 'dan', 'fitz') 

否则,FK约束将履行其职责并告诉你,如果testb中不存在具有相同company_id的行,则不能将行插入tesa

同时,请允许我发表一个观察意见:现在设置的方式,您可以只能是否有一个条目tesa为给定的company_id,因为该值必须是UNIQUE-这真的是你的意图吗?似乎如果这些是公司的客户或员工,您可能希望在tesa中为任何给定的company_id拥有多个条目,引用一个公司(一对多)。关系)。只是想知道....

还有一点:两个表都没有定义主键-这是典型的参考完整性的支柱之一。您当前的设置工作,因为SQL Server允许允许表引用唯一约束在另一个表中—但是您应该真正考虑主键

最后:为表....使用比tesatestb更具表现力的名称testb很可能被称为Company,而tesa,使用任何有意义的-Customer,Employee,Fan-无论这些人是他们所连接的公司.....

最新更新