由于引用同一个表,外键的插入约束

Posted

技术标签:

【中文标题】由于引用同一个表,外键的插入约束【英文标题】:insertion constraint by Foreign key due to referencing same table 【发布时间】:2013-11-22 14:57:01 【问题描述】:

我有一个表employee,它有ssn作为主键和另一个supr_ssn属性,它是一个外键引用员工表本身的ssn .因此,在插入表时,我得到了外键约束,因为我没有在 ssn 中插入任何值。这是我的桌子:

create table employee(
    Fname varchar(15) not null,
    Minit char,
    Lname Varchar(15) not null,
    ssn char(9) not null,
    Bdate Date,
    Address varchar(30),
    sex char,
    Salary decimal(10,2),
    super_ssn char(9),
    Dno int not null,
    primary key(ssn),
    foreign key(super_ssn)references employee(ssn),
    foreign key(dno)references department(Dnumber)
)

当我插入表时,使用代码我得到外键约束:

insert into sample.employee(
    Fname, Minit, Lname, ssn, Bdate,
    Address, sex, salary, Dno
)
values(
    'John', 'B', 'Smith', '123456789', 01/09/1965,
    '731 fondren,housten', 'M', 30000, '333445555', 5
)

【问题讨论】:

我可能会问一个愚蠢的问题,但你不应该让super_ssn 接受空值,用于位于树顶部的记录吗? 我的SQLFiddle 中没有出现该错误。不过,我不得不纠正一些问题。我取出了department外键(因为这里没有部门表),在插入的VALUES部分末尾有一个额外的值5 @Bartdude:我相信允许空值是默认设置。你必须明确地说NOT NULL 不允许空值。 是的,这里没有必要,因为我们将拥有 ssn 中存在的 super_ssn 值。由于 ssn 是主键,它不会有任何空值,而 super_ssn 也不能有空值。 【参考方案1】:

如果主键值不存在,则不能向外键输入值。 因此,输入主键值,然后尝试相应地更新外键值。

【讨论】:

以上是关于由于引用同一个表,外键的插入约束的主要内容,如果未能解决你的问题,请参考以下文章

11.21

外键约束

oracle中外键的作用

由于键更改,尝试插入时外键约束失败

postgresql----数据库表约束----FOREIGN KEY

多表操作