【发布时间】:2023-03-30 04:55: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 也不能有空值。