ERROR 1452: Cannot add or update a child row: a foreign key constraint fails

后端 未结 21 2147
野性不改
野性不改 2020-11-22 07:01

I have created tables in MySQL Workbench as shown below :

ORDRE table:

CREATE TABLE Ordre (
  OrdreID   INT NOT NULL,
  OrdreDato DA         


        
21条回答
  •  天命终不由人
    2020-11-22 07:46

    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.

    1. 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 null as well.
    2. Delete these rows having unmatching values.
    3. 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.

提交回复
热议问题