创建新表失败,并显示错误消息“外键约束形成错误”

时间:2017-04-14 09:16:26

标签: sql foreign-keys mariadb

我有两条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)
);

第一个成功执行,第二个为前一个表分配外键,无法执行消息“外键约束不正确”。我也尝试改变第二个查询的外键字段(addr_country),使其与'countries'表(国家/地区)的名称相同,但它最无用。

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

尝试在country表的countries列中添加唯一约束:

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主键而不是国家/地区名称。由于世界上没有两个国家具有相同的名称,因此可能在实践中起作用。