2009-09-30 9 views
13

Mam bazę danych programowania (MYSQL), którą chciałbym załadować świeżymi danymi w pewnym momencie. Chciałbym usunąć zawartość wszystkich tabel. Jaki jest najlepszy sposób, jak zautomatyzowany, jak to możliwe, do usunięcia zawartości wszystkich tabel (również tych, które mają ograniczenia klucza obcego). Czy istnieje obcięcie wszystkich/usunięcie wszystkich równoważnych ograniczeń?Skróć wszystkie tabele (z których większość ma ograniczenia). Jak tymczasowo je upuścić

Dzięki

Odpowiedz

0

Jeśli chcesz obciąć naprawdę wszystko stoły lepszego sposobu myślenia Jestem spadek i tworzenia bazy danych z wcześniej wyodrębnione schematu bazy danych. Lub możesz po prostu dwie kopie tej samej bazy danych - test i pusty. Po wypełnieniu tabel, po prostu usuń testowy plik db i skopiuj pusty, aby przetestować.

0

TRUNCATE (TABLE) tbl_name obciąży pojedynczą tabelę. Możesz umieścić go w skrypcie i przeglądać go ze wszystkimi nazwami twoich tabel.

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

Możesz zajrzeć do migracji, zbyt, ale myślę, że Alexey ma tam odpowiedniego podejścia. Jest bardzo podobny do tego, jak RoR radzi sobie z przebudowywaniem testowej bazy danych przy każdym uruchomieniu.

29

myślę, że można wykonać następujące czynności:

  1. Wyłącz klucz obcy ograniczenia CHECK

    mysql> SET FOREIGN_KEY_CHECKS = 0; 
    
  2. Obciąć tabele

    mysql> TRUNCATE MY_TABLE; 
    
  3. Włącz klucz obcy ograniczenia CHECK

    mysql> SET FOREIGN_KEY_CHECKS = 1; 
    

Wolę wyłączenie kluczy obcych do tymczasowego spadku/ich odtworzenie.

+0

Szybki komentarz dla każdego, kto używa 'PHPMYADMIN', aby to zrobić. Jeśli wykonasz wszystkie powyższe instrukcje w jednej linii SQL, to zadziała. Jeśli spróbujesz zrobić to pojedynczo, to nie działa. Oczywiście, jestem pewien, że działa on na zwykłej linii poleceń 'mysql' w formie @Pascal Thivent. – Sablefoste

0

Oto, co zrobić z wiersza poleceń:

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

Problem jest, jeśli wymagają uwierzytelniania, trzeba będzie dodać -u YOUR_USERNAME -pYOURPASSWORD zarówno po mysql poleceń.

Jeśli nie chcesz wpisywać hasła w wierszu polecenia (nigdy nie), musisz skopiować i wkleić hasło po każdym monicie, które może być kilka razy w zależności od numeru tabel.

Powiązane problemy