外键未填充主键值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外键未填充主键值相关的知识,希望对你有一定的参考价值。

我已经找到了答案,但我找不到它。我有2张桌子。两者都有自动生成的PK。表2中的PK是表1中的FK。由于它们都是自动生成的,我假设表1中的FK将填充从表2自动生成的值,但它不起作用。表1中的FK最终为null。这是我创建表1的SQL代码:

CREATE TABLE Employee_tbl (
EmployeeID int PRIMARY KEY IDENTITY,
LastName varchar(20) not null,
FirstName varchar(20) not null,
Age varchar(3) not null,
JobID int FOREIGN KEY REFERENCES JobTitle_tbl(JobID),
)

这是表2:

create table JobTitle_tbl(
JobID int PRIMARY KEY IDENTITY,
EEO1Classification varchar(50) not null,
Exempt_nonexempt_status varchar(20) not null,
)

我也有一些插入语句:

INSERT INTO Employee_tbl
    (LastName, FirstName, Age)
Values
    ('Smith', 'John', '50'),
    ...

和:

INSERT into JobTitle_tbl (EEO1Classification, Job_title, )
VALUES ('Office/Clerical', 'Accounting Clerk', ),

当我查询表1时,为什么FK值显示为空?

答案

外键不会自动填充,因为它不知道使用什么外键。您需要将行插入JobTitle_tbl表,然后选择退出的ID(如果使用sql server,则使用@@ identity)

select id from JobTitle_tbl where Job_title = ''

另一种选择是更新insert语句以包含主键,尽管您必须先允许标识插入。

SET IDENTITY_INSERT JobTitle_tbl ON
into the JobTitle_tbl (id, title) values (1, 'Manager')
SET IDENTITY_INSERT JobTitle_tbl OFF

在任何一种情况下,您都需要使用您拥有的ID更新您的第一个插入语句。

insert into Employee_tbl (LastName, FirstName, JobID) values ('Smith', 'John', 1)

以上是关于外键未填充主键值的主要内容,如果未能解决你的问题,请参考以下文章

数据库中 主键与外键的区别?

主键和外键的作用

更改主键值

如何使用 PHP 插入或更新外键值

JPA ManyToOne 关系:外键未存储在多方表中

Django外键未在模板中呈现相关模型数据