【问题标题】:insertion constraint by Foreign key due to referencing same table由于引用同一个表,外键的插入约束
【发布时间】: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 也不能有空值。

标签: mysql sql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2021-12-09
    • 2023-04-02
    • 2015-02-09
    相关资源
    最近更新 更多