ERROR 1452: Cannot add or update a child row: a foreign key constraint fails :
Taken from Using FOREIGN KEY Constraints
Foreign key relationships involve a parent table that holds the central data values, and a child table with identical values pointing back to its parent. The FOREIGN KEY clause is specified in the child table.
It will reject any INSERT or UPDATE operation that attempts to create a foreign key value in a child table if there is no a matching candidate key value in the parent table.
So your error
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails essentially means that, you are trying to add a row to your
Ordrelinje table for which no matching row (OrderID) is present in
You must first insert the row to your
The Problem is with FOREIGN KEY Constraint. By Default (SET FOREIGN_KEY_CHECKS = 1). FOREIGN_KEY_CHECKS option specifies whether or not to check foreign key constraints for InnoDB tables. MySQL – SET FOREIGN_KEY_CHECKS
We can set foreign key check as disable before running Query. Disable Foreign key.
Execute one of these lines before running your query, then you can run your query successfully. 🙂
1) For Session (recommended)
SET GLOBAL FOREIGN_KEY_CHECKS=0;
This error generally occurs because we have some values in the referencing field of the child table, which do not exist in the referenced/candidate field of the parent table.
Sometimes, we may get this error when we are applying Foreign Key constraints to existing table(s), having data in them already. Some of the other answers are suggesting to delete the data completely from child table, and then apply the constraint. However, this is not an option when we already have working/production data in the child table. In most scenarios, we will need to update the data in the child table (instead of deleting them).
Now, we can utilize
Left Join to find all those rows in the child table, which does not have matching values in the parent table. Following query would be helpful to fetch those non-matching rows:
SELECT child_table.* FROM child_table LEFT JOIN parent_table ON parent_table.referenced_column = child_table.referencing_column WHERE parent_table.referenced_column IS NULL
Now, you can generally do one (or more) of the following steps to fix the data.
- Based on your “business logic”, you will need to update/match these unmatching value(s), with the existing values in the parent table. You may sometimes need to set them
- Delete these rows having unmatching values.
- Add new rows in your parent table, corresponding to the unmatching values in the child table.
Once the data is fixed, we can apply the Foreign key constraint using
ALTER TABLE syntax.
You are getting this constraint check because
Ordre table does not have reference
OrdreID provided in insert command.
To insert value in
Ordrelinje, you first have to enter value in
Ordre table and use same
Or you can remove not null constraint and insert a NULL value in it.
You must delete data in the child table which does not have any corresponding foreign key value to the parent table primary key .Or delete all data from the child table then insert new data having the same foreign key value as the primary key in the parent table . That should work . Here also a youtube video