When you get this vague error message, you can find out the more specific error by running
SHOW ENGINE INNODB STATUS;
The most common reasons are that when creating a foreign key, both the referenced field and the foreign key field need to match:
- Engine should be the same e.g. InnoDB
- Datatype should be the same, and with same length.
e.g. VARCHAR(20) or INT(10) UNSIGNED - Collation should be the same. e.g. utf8
- Unique – Foreign key should refer to field that is unique (usually private) in the reference table.
Another cause of this error is:
You have defined a SET NULL condition though some of the columns are defined as NOT NULL.