创建新 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
主键而不是国家名称。由于世界上没有两个国家的名称相同,因此在实践中可能都行得通。
我有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
主键而不是国家名称。由于世界上没有两个国家的名称相同,因此在实践中可能都行得通。