MySQL Cannot Add Foreign Key Constraint
- Engine should be the same e.g. InnoDB
- Datatype should be the same, and with same length. e.g. VARCHAR(20)
- Collation Columns charset should be the same. e.g. utf8
Watchout: Even if your tables have same Collation, columns still could have different one. - Unique - Foreign key should refer to field that is unique (usually primary key) in the reference table.
I had set one field as "Unsigned" and other one not. Once I set both columns to Unsigned it worked.
To find the specific error run this:
SHOW ENGINE INNODB STATUS;
And look in the LATEST FOREIGN KEY ERROR
section.
The data type for the child column must match the parent column exactly. For example, since medicalhistory.MedicalHistoryID
is an INT
, Patient.MedicalHistory
also needs to be an INT
, not a SMALLINT
.
Also, you should run the query set foreign_key_checks=0
before running the DDL so you can create the tables in an arbitrary order rather than needing to create all parent tables before the relevant child tables.