Risolvere l’errore #1452 – Cannot add or update a child row phpMyAdmin / MySql

Quando si cerca di creare una chiave esterna (FOREIGN KEY) su una tabella esistente in MySql si può ricevere il seguente errore:

#1452 - Cannot add or update a child row....

L’errore dipende dal fatto che nella tabella in cui si sta creando la chiave esterna sono presenti dei dati inesistenti nella tabella a cui si fa riferimento.

E’ sufficente quindi rimuovere questi dati dalla tabella di riferimento con questa semplice query.

DELETE FROM table_a WHERE colonna_fk IN (SELECT colonna_fk FROM table_a where colonna_fk NOT IN (SELECT colonna_pk FROM table_b))

Naturalmente table_a è la tabella avente la chiave esterna (colonna_fk) mentre table_b è la tabella di riferimento (colonna_pk è la chiave primaria di table_b)