首页 > 解决方案 > 引用另一个外键时,SQL“外键约束格式不正确”

问题描述

我正在尝试为外键创建外键(我认为这是可能的),但我不断收到错误消息,即约束的格式不正确

CREATE TABLE Staff (
    ssn INT, 
    name VARCHAR(127), 
    gender VARCHAR(127), 
    age TINYINT UNSIGNED, 
    address VARCHAR(255), 
    phone_number CHAR(12), 
    wage FLOAT(3,2), 
    PRIMARY KEY (ssn));
CREATE TABLE Admininstration (
    ssn INT, 
    FOREIGN KEY (ssn) REFERENCES Staff(ssn), 
    PRIMARY KEY (ssn));
CREATE TABLE Wards (
    ward_clerk INT,
    ward_id CHAR(2), 
    floor_number TINYINT, 
    FOREIGN KEY (ward_clerk) REFERENCES Administration(ssn), 
    PRIMARY KEY (ward_id)
);
ERROR 1005 (HY000): Can't create table `HospitalManagement`.`Wards`
       (errno: 150 "Foreign key constraint is incorrectly formed")

如果我更改最后一条语句以引用 Staff 表

CREATE TABLE Wards (
    ward_clerk INT, 
    ward_id CHAR(2), 
    floor_number TINYINT, 
    FOREIGN KEY (ward_clerk) REFERENCES Staff(ssn), 
    PRIMARY KEY (ward_id)
);

它有效,但这不是我想要做的。如果这不可能,我知道我将如何改变它,但我想这样做。任何建议表示赞赏。

标签: sqlmariadb

解决方案


在适当的情况下,制作列NOT NULL

请注意存储 SSN 的严重安全隐患。

wage在 -9.99 和 9.99 之间?便宜的。不要FLOAT用来赚钱;使用DECIMAL.


推荐阅读