2009-09-30 15 views

risposta

0

Se volete troncare VERAMENTE tutte le tabelle modo migliore che io sono caduta e creare database con schema del database precedentemente estratto. O puoi solo copiare due copie dello stesso database: test e vuoto. Dopo aver riempito le tue tabelle, elimina il test db e copia vuoto per testare.

0

TRUNCATE (TABLE) tbl_name troncherà una singola tabella. Puoi inserirla in uno script e visualizzarla in loop con tutti i nomi delle tabelle.

http://dev.mysql.com/doc/refman/5.0/en/truncate.html

Si consiglia di guardare in migrazioni, troppo, ma penso che Alexey ha il giusto approccio lì. È molto simile al modo in cui RoR gestisce la ricostruzione del database di test in ogni esecuzione.

29

Penso che si possa effettuare le seguenti operazioni:

  1. disattivare il controllo di vincolo di chiave esterna

    mysql> SET FOREIGN_KEY_CHECKS = 0; 
    
  2. Tronca le tabelle

    mysql> TRUNCATE MY_TABLE; 
    
  3. Attiva il controllo vincolo di chiave esterna

    mysql> SET FOREIGN_KEY_CHECKS = 1; 
    

preferisco la disattivazione dei vincoli di chiave esterna temporaneamente per far cadere/ricrearli.

+0

Commento rapido per chiunque usi 'PHPMYADMIN' per fare ciò. Se si eseguono tutte le istruzioni di cui sopra in una riga SQL, funziona. Se provi a farlo uno alla volta, non funziona. Ovviamente, sono sicuro che funzioni sulla normale riga di comando 'mysql' come mostra @Pascal Thivent. – Sablefoste

0

Ecco quello che faccio dal prompt dei comandi:

mysql -Nse 'show tables' DATABASE_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS = 0; TRUNCATE table $table" DATABASE_NAME; done 

Il problema è che, se si richiede l'autenticazione, è necessario aggiungere un -u YOUR_USERNAME -pYOURPASSWORD dopo entrambi mysql comandi.

Se non si desidera immettere la password al prompt dei comandi (non lo è mai), sarà necessario copiare e incollare la password dopo ogni prompt, che potrebbe essere diverse volte in base al numero di tavoli.

Problemi correlati