【发布时间】:2020-09-17 00:16:56
【问题描述】:
我有两张桌子,clinics 和 consultations。
每个咨询记录都属于一个诊所,所以我想我会将clinic_name 设置为引用clinics 表中的clinic_name 的外键。但它会抛出一个错误:
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))";
【问题讨论】:
-
只是为了澄清——我只是在
FOREIGN KEY部分之前添加CONSTRAINT FK_clinicname? -
clinic_name不是诊所表中的主键 -
我应该在咨询中使用
FOREIGN KEY (id) REFERENCES clinics(id)吗? -
是的,可以。但您不需要在
consultations表中将 ID 声明为 Auto Increment 列 -
@SoumendraMishra 是有道理的。谢谢!
标签: mysql sql foreign-keys one-to-many