创建新 table 失败并显示错误消息 "Foreign key constraint is incorrectly formed"

Creation of new table fails with error message "Foreign key constraint is incorrectly formed"

我有2个SQL语句如下:

CREATE TABLE IF NOT EXISTS countries
(
    country_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    country varchar(45) NOT NULL
);

CREATE TABLE IF NOT EXISTS patients
(
    p_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    p_fname varchar(50) NOT NULL,
    p_mname varchar(10) NULL,
    p_lname varchar(50) NOT NULL,
    age INT NOT NULL,
    sex SET ('Male','Female'),
    phone_num_mobile varchar(10) NULL,
    phone_num_res varchar(7) NULL,
    phone_num_office varchar(7) NULL,
    email varchar(75) NULL,
    addr_house varchar(10) NULL,
    addr_street1 varchar(45) NOT NULL,
    addr_street2 varchar(45) NULL,
    addr_street3 varchar(45) NULL,
    addr_city varchar(20) NOT NULL,
    addr_country varchar(45) NOT NULL,
    occupation varchar(20) NOT NULL,
    married BOOLEAN NOT NULL,
    FOREIGN KEY(addr_country) REFERENCES countries(country)
);

第一个执行成功,第二个将外键分配给前一个 table,执行失败并显示消息 'Foreign key constraint incorrectly formed'。我还尝试更改第二个查询的外键字段 (addr_country) 使其与 'countries' table(country) 具有相同的名称,但它无济于事。

任何人都可以向我解释发生了什么事并建议我解决这个问题吗?

提前致谢。

MariaDB 中的外键只能引用另一个 table 中的主键或唯一键。在这种情况下,countries table 已经有一个主键,因此您可以在 country 列上创建一个唯一键。

尝试对 countries 中的 country 列设置唯一约束 table:

CREATE TABLE IF NOT EXISTS countries
(
    country_id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    country varchar(45) NOT NULL
    UNIQUE KEY(country)
);

后期编辑:正如评论员所提到的,您可能只想引用 country_id 主键而不是国家名称。由于世界上没有两个国家的名称相同,因此在实践中可能都行得通。