为什么我不能为此设置外键?

时间:2019-09-03 15:03:35

标签: mysql sql foreign-keys

我正在尝试将部门表中的外键添加到员工表中。第一个完成,但是我无法创建部门表,它弹出错误

  

错误1005(HY000):无法创建表`assignment`.`department`(错误号:150“外键约束格式不正确”)

喜欢这个。

CREATE TABLE employee
(
    First_Name VARCHAR(15) NOT NULL,
    Mid_Name CHAR,
    Last_Name VARCHAR(15) NOT NULL,
    SSN_Number CHAR(9) PRIMARY KEY NOT NULL,
    Birthday DATE,
    Address VARCHAR(50),
    Sex CHAR CHECK(Sex='M' OR Sex='F' OR Sex='m' OR Sex='f'),
    Salary Decimal(10,2) DEFAULT'800',
    Supervisor_SSN CHAR(9),
    Department_Number INT,
    CONSTRAINT fk_employee FOREIGN KEY(Supervisor_SSN)
    REFERENCES employee(SSN_Number) ON DELETE SET NULL
);

CREATE TABLE department
(
    Department_Name VARCHAR(15) NOT NULL UNIQUE,
    Department_Number INT PRIMARY KEY NOT NULL,
    Manaager_SSN CHAR(9) NOT NULL,
    Manager_Start_Date Date,
    CONSTRAINT fk_manager FOREIGN KEY(Manaager_SSN)
    REFERENCES employee(SSN_Number) ON DELETE SET NULL
);

我希望将Manaager_SSN上的外键添加到雇员表中的SSN_Number上。

2 个答案:

答案 0 :(得分:1)

如果列被声明为ON DELETE SET NULL,则选项NOT NULL无效。您是在告诉它将列设置为不可能的值。

因此,可以将Manaager_SSN的声明更改为NULL,或者将外键更改为ON DELETE CASCADE。前者可能更合适-如果部门经理离开公司,则通常不会解散该部门。

答案 1 :(得分:0)

外键定义包括

... ON DELETE SET NULL 
              ^^^^^^^^  

但是外键列定义为非NULL

 Manaager_SSN CHAR(9) NOT NULL,
                      ^^^^^^^^