表创建-外键约束格式错误

时间:2019-03-28 14:34:12

标签: mysql foreign-keys mariadb

我正在为一个项目的动物园创建一个数据库,当我尝试使用表“动物”中的主键创建表“生活”时,出现错误

CREATE TABLE Department
    (DeptName       VARCHAR(35),
     DeptBuilding   VARCHAR(35),
     DeptBudget     VARCHAR(9),
     PRIMARY KEY(DeptName)
    );

CREATE TABLE Animals
    (AnimalID       CHAR(5),
     NameLatin      VARCHAR(35),
     DeptName       VARCHAR(35),
     AnimalType     VARCHAR(10),
     AnimalName     VARCHAR(10),
     PRIMARY KEY(AnimalID),
     FOREIGN KEY(DeptName) REFERENCES Department(DeptName) ON DELETE SET NULL
    );

CREATE TABLE Houses
    (HouseID        CHAR(5),
     HouseName      VARCHAR(35),
     TypeHouse      VARCHAR(10),
     DeptName       VARCHAR(35),
     PRIMARY KEY(HouseID), 
     FOREIGN KEY(DeptName) REFERENCES Department(DeptName) ON DELETE SET NULL
    );

CREATE TABLE Lives
    (AnimalID       CHAR(5),
     HouseID        CHAR(5),
     PRIMARY KEY(AnimalID, HouseID),
     FOREIGN KEY(AnimalID) REFERENCES Animals(AnimalID) ON DELETE SET NULL,
     FOREIGN KEY(HouseID) REFERENCES Houses(HouseID) ON DELETE SET NULL
    );

我希望它创建表,但我得到:“外键约束格式不正确”

1 个答案:

答案 0 :(得分:1)

我认为问题是ON DELETE SET NULL。 鉴于AnimalID是“生命”主键中的一列,因此无法指定将该列设置为NULL。 (PRIMARY KEY约束对主键中的列强制执行NOT NULL限制。) 尝试删除限制。然后使用ON DELETE CASCADE进行旋转。 如果我们省略ON DELETE和ON UPDATE子句,则默认操作为NO ACTION,据我所知,该操作与指定RESTRICT完全相同。