Error Reference › SQL / Database
SQL / Database
Foreign key constraint fails (1452)
A row references a parent row that doesn't exist (or you're deleting a parent that still has children).
What it looks like
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`shop`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`))
What does "Foreign key constraint fails (1452)" mean?
Returned by MySQL when a row would point at a parent row that does not exist. The message spells out the constraint: the child table and column, and the parent table and column it must match. Error 1451 is the mirror image — deleting a parent that still has children.
What causes "Foreign key constraint fails (1452)"?
- Inserting a child with a parent id that isn't there.
- Deleting a parent while children reference it.
- Inserting in the wrong order.
How do I confirm the cause?
- From the message, note the child column (customer_id) and the parent it references (customers.id).
- Check that the value you are inserting exists in the parent table: SELECT id FROM customers WHERE id = ….
- In imports and seeds, check the order — parents must be inserted before the rows that reference them.
How do I fix "Foreign key constraint fails (1452)"?
- Insert the parent row first, then the child.
- Check the referenced id actually exists.
- Use ON DELETE CASCADE/SET NULL if appropriate.
How do I stop it happening again?
- Insert related rows inside one transaction, parents first.
- Choose ON DELETE CASCADE, SET NULL or RESTRICT deliberately for each relationship.