由于引用同一个表,外键的插入约束
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】:
如果主键值不存在,则不能向外键输入值。 因此,输入主键值,然后尝试相应地更新外键值。
【讨论】:
以上是关于由于引用同一个表,外键的插入约束的主要内容,如果未能解决你的问题,请参考以下文章