如何解决MySQL:添加外键约束失败
我有两个表clinics
和consultations
。
每个咨询记录都属于一个诊所,因此我想将clinic_name
设置为引用clinic_name
表中clinics
的外键。但这会引发错误:
code: 'ER_FK_NO_INDEX_PARENT',errno: 1822,sqlMessage: "Failed to add the foreign key constraint. Missing index for constraint 'consultations_ibfk_1' in the referenced table 'clinics'",
诊所表:
const sql_createclinics =
"CREATE TABLE IF NOT EXISTS clinics(" +
"id INT AUTO_INCREMENT," +
"email VARCHAR(255) NOT NULL," +
"password VARCHAR(255) NOT NULL," +
"clinic_name VARCHAR(255) NOT NULL," +
"phone_num VARCHAR(15) NOT NULL," +
"address VARCHAR(255) NOT NULL," +
"PRIMARY KEY (id))";
**咨询表:**
const sql_createconsult =
"CREATE TABLE IF NOT EXISTS consultations(" +
"id INT AUTO_INCREMENT," +
"clinic_name VARCHAR(255)," +
"doctor_name VARCHAR(255)," +
"patient_name VARCHAR(255)," +
"diagnosis VARCHAR(255)," +
"medication VARCHAR(255)," +
"consultation_fee FLOAT," +
"datetime DATETIME DEFAULT CURRENT_TIMESTAMP," +
"PRIMARY KEY (id)," +
"FOREIGN KEY (clinic_name) REFERENCES clinics(clinic_name))";
解决方法
外键应引用另一个表中的单个记录。
使用您的架构定义,您不能保证clinic_name是唯一的。如果clinics.clinic_name
是唯一的,则通过为其创建唯一索引来在数据库中强制它。否则,请勿使用climate_name作为外键,而应将诊所的id纳入考虑范围,并使用id创建外键约束。
与临床ID有关:
const sql_createconsult =
"CREATE TABLE IF NOT EXISTS consultations(" +
"id INT AUTO_INCREMENT," +
"clinic_id INT," +
"doctor_name VARCHAR(255)," +
"patient_name VARCHAR(255)," +
"diagnosis VARCHAR(255)," +
"medication VARCHAR(255)," +
"consultation_fee FLOAT," +
"datetime DATETIME DEFAULT CURRENT_TIMESTAMP," +
"PRIMARY KEY (id)," +
"FOREIGN KEY (clinic_id) REFERENCES clinics(clinic_id))";
,
您可以尝试以下方法:
CREATE TABLE IF NOT EXISTS consultations(
id INT,clinic_name VARCHAR(255),doctor_name VARCHAR(255),patient_name VARCHAR(255),diagnosis VARCHAR(255),medication VARCHAR(255),consultation_fee FLOAT,datetime DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (id) REFERENCES clinics(id));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。