2012-06-19 29 views
32

In MySQL voglio rilasciare una tabella.
Ho provato molte cose, ma continuo a ricevere l'errore che la tabella denominata bericht non può essere eliminata. Questo è l'errore che sto ricevendo:Impossibile eliminare la tabella: un vincolo di chiave esterna non riesce

# 1217 - Impossibile eliminare o aggiornare una riga padre: un vincolo di chiave esterna non riesce

Come faccio cadere questo tavolo?

+2

Individuare quale altra tabella fa riferimento a essa tramite chiave esterna e prima rilasciare il vincolo FK su tale tabella, quindi rilasciare questa tabella. –

+0

È necessario rimuovere il requisito da altre tabelle su quello che non si desidera più – BugFinder

+1

Nessuna di queste risposte è utile? http://stackoverflow.com/questions/1905470/cannot-delete-or-update-a-parent-row-a-foreign-key-constraint-fails http://stackoverflow.com/questions/3334619/can not-delete-or-update-a-parent-row-a-foreign-key-constraint-fail –

risposta

44

Prova questo:

SELECT * 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_NAME = 'YourTable'; 

Questo dovrebbe fornire si che le tabelle hanno i riferimenti alla tabella che si desidera eliminare, una volta che si lascia cadere questi riferimenti, o le serie di dati che i set di dati di riferimento in questa tabella si sarà in grado di eliminare la tabella

+4

Questa soluzione è decisamente migliore. È più sicuro e non è una cattiva pratica come la risposta selezionata. – Sloganho

+1

ha funzionato per me, questa risposta dovrebbe essere contrassegnata come accettata. – parvez

68

Questo dovrebbe fare il trucco:

SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1; 

Come altri sottolineano, questo non è quasi mai quello che si vuole, anche se è che cosa ha chiesto nella domanda. Una soluzione più sicura consiste nell'eliminare le tabelle in base a bericht prima di eliminare bericht. Vedi la risposta di CloudyMarble su come farlo. Io uso bash e il metodo nel mio post per eliminare tutte le tabelle in un database quando non desidero o non posso cancellare e ricreare il database stesso.

L'errore #1217 si verifica quando altre tabelle hanno vincoli di chiave esterna alla tabella che si sta tentando di eliminare e si sta utilizzando il motore di database InnoDB. Questa soluzione disabilita temporaneamente il controllo dei vincoli e quindi riabilita. Leggi il documentation per ulteriori informazioni. Assicurati di eliminare i vincoli delle chiavi straniere e i campi nelle tabelle a seconda di bericht, altrimenti potresti lasciare il tuo database in uno stato non funzionante.

+2

Questo dovrebbe essere selezionato rispondere – kyeno

+0

fino ad ora è la migliore risposta e dovrebbe essere in cima !!!!!! –

+1

Anche se è corretto, è incredibilmente CATTIVO PRATICO farlo. Come è stato sottolineato da più utenti (tra cui Rune Kaagaard), dovresti trovare i riferimenti, analizzarli e rilasciarli se necessario. – zozo

1

Questo probabilmente ha la stessa tabella in un altro schema il motivo per cui si sta verificando quell'errore.

È necessario prima rilasciare la riga secondaria della riga padre.

0

Mi rendo conto che è stantio per un po 'e una risposta erano stati selezionati, ma come l'alternativa per consentire la chiave esterna per essere NULL e quindi scegliere ON DELETE SET NULL.

In sostanza, la tabella dovrebbe essere modificato in questo modo:

ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key';

ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' ('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;

Personalmente mi sento di raccomandare utilizzando sia "ON UPDATE CASCADE", così come "ON DELETE SET NULL" per evitare complicazioni inutili, tuttavia il tuo set up potrebbe dettare un approccio diverso.

Spero che questo aiuti.

Problemi correlati