MySql errore #1452 – Cannot add or update a child row

Vi è mai capitato di dover convertire un db che avesse come engine MYSQL in InnoDb?

Perchè cambiare engine? la prima cosa per le fantastiche constraint.

E’ appurato che nel 99% dei casi, quando si prova a creare una FOREIGN KEY, Mysql restituisce il messaggio di errore:

#1452 – Cannot add or update a child row….

Il codice di errore è utilizzato per indicare la presenza di dati inesistenti nella tabella a cui si sta facendo riferimento per la creazione delle chiavi.

Per risolvere velocemente questo problema quindi è necessario rimuovere tali dati con una semplice query:

DELETE FROM tabella1 
WHERE 
campoFK IN (
            SELECT campoFK 
            FROM tabella1 
            WHERE 
            campoFK NOT IN (SELECT campoPK FROM tabella2) 
           )

Leave a Reply

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.