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)