微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL:添加外键约束失败

如何解决MySQL:添加外键约束失败

我有两个表clinicsconsultations
每个咨询记录都属于一个诊所,因此我想将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 举报,一经查实,本站将立刻删除。