我有两条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'表(国家/地区)的名称相同,但它最无用。
任何人都可以向我解释发生了什么,并建议我解决这个问题吗?
提前致谢。
答案 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
主键而不是国家/地区名称。由于世界上没有两个国家具有相同的名称,因此可能在实践中起作用。