2010-02-19 16 views
104

Sto cercando di eliminare tutte le tabelle da un database tranne uno, e io finiscono per avere il seguente errore:Forza goccia mysql bypassando vincolo di chiave esterna

Cannot delete or update a parent row: a foreign key constraint fails

Naturalmente potrei tentativi ed errori per vedere cosa quei vincoli chiave sono e alla fine cancellano tutti i tavoli, ma vorrei sapere se c'è un modo veloce per forzare la caduta di tutte le tabelle (dato che potrò reinserire quelle che non voglio cancellare).

Google mi rivolge a qualche sito che ha suggerito il seguente metodo:

mysql> SET foreign_key_checks = 0; 
mysql> drop table ... 
mysql> SET foreign_key_checks = 1; 

risposta breve è che non ha davvero fare il trucco da quando ho finito per ricevere lo stesso errore mentre ero in grado di eliminare un po ' tabelle. Ho visto su Stack Overflow modi per ottenere tutte le chiavi esterne collegate a una certa tabella, ma è troppo dispendioso in termini di tempo a meno che non scriva tutto (che è fattibile nel caso non ci sia altra opzione)

Il database è 4,1 Non riesco a utilizzare DROP DATABASE

Idee?

risposta

-14

Poiché non sei interessato a conservare alcun dato, drop the entire database e crearne uno nuovo.

+0

Dimenticato di dire che il database non è mysql 5.x ma 4.x il che significa che non sono in grado di usare quel comando – johnnyArt

+1

Penso che dovresti - http://dev.mysql.com/doc/refman /4.1/en/drop-database.html –

+2

Oh my, mi sento così stupido ora, stavo sostituendo la parola DATABASE con il nome effettivo del database invece di aggiungerlo in seguito, grazie a entrambi +1 – johnnyArt

3

Il database di caduta esiste in tutte le versioni di MySQL. Ma se si desidera mantenere la struttura della tabella, ecco un'idea

mysqldump --no-dati --add-drop-banca dati --add-drop-table -hHOSTNAME -uUSERNAME -p> dump.sql

Questo è un programma, non un comando mysql

Poi, accedere a mysql e dump.sql

fonte;

302

Questo potrebbe essere utile a qualcuno che finisce qui da una ricerca. Assicurati di provare a eliminare un tavolo e non a vista.

 
SET foreign_key_checks = 0; 
-- Drop tables 
drop table ... 
-- Drop views 
drop view ... 
SET foreign_key_checks = 1; 

SET foreign_key_checks = 0 è quello di impostare controlli chiave esterna su OFF e poi SET foreign_key_checks = 1 è quello di impostare controlli chiave esterna sul retro. Mentre i controlli sono disattivati, le tabelle possono essere eliminate, i controlli vengono quindi riattivati ​​per mantenere l'integrità della struttura della tabella. schermata

+27

PAT è mio amico! – SeanDowney

+5

Questa è una risposta corretta migliore. Risolve il problema dell'eliminazione di tutte le tabelle o solo di alcune. Terrific! –

+0

Grazie mille, mi stavo davvero frustrando per questo. –

4

È possibile utilizzare le seguenti operazioni, la sua ha lavorato per me per cadere tavolo con vincolo, soluzione già spiegato nel commento di cui sopra, ho solo aggiunto per questo - enter image description here

12

Se si utilizza phpMyAdmin poi questa funzione è già lì.

  • Selezionare le tabelle che si desidera eliminare
  • Dal menu a discesa nella parte inferiore della lista delle tabelle, selezionare goccia
  • una nuova pagina verrà aperta avendo casella in fondo dicendo "controllo di chiave esterna", deselezionalo.
  • Confermare la cancellazione accettando "sì".
+0

Hai salvato la mia giornata! Grazie! Ha funzionato come un fascino! – Kami

+0

L'unico modo in cui ha funzionato per me. Grazie ! – paulalexandru

Problemi correlati