Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 为什么我不能在上面形成外键?_Mysql_Sql_Foreign Keys - Fatal编程技术网

Mysql 为什么我不能在上面形成外键?

Mysql 为什么我不能在上面形成外键?,mysql,sql,foreign-keys,Mysql,Sql,Foreign Keys,我正在尝试将外键从department表添加到employee表。第一个已完成,但我无法创建部门表,它会弹出错误 错误1005 HY000:无法创建表'assignment'。'department'errno:150外键约束格式不正确 像这样 CREATE TABLE employee ( First_Name VARCHAR(15) NOT NULL, Mid_Name CHAR, Last_Name VARCHAR(15) NOT NULL, SSN_Num

我正在尝试将外键从department表添加到employee表。第一个已完成,但我无法创建部门表,它会弹出错误

错误1005 HY000:无法创建表'assignment'。'department'errno: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
);
我希望将管理器SSN上的外键添加到employee表中的SSN编号。

如果列声明为非空,则DELETE SET NULL上的选项无效。您告诉它将列设置为不可能的值


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

外键定义包括

... ON DELETE SET NULL 
              ^^^^^^^^  
但是外键列被定义为非NULL

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

这真的很有帮助,谢谢!谢谢你!这真的很有帮助!