2010-12-15 14 views
5

Mam bazę danych, której kopię zapasową utworzono. Teraz próbuję usunąć całą zawartość z oryginalnej db i przywrócić ją do pustego stanu. ponieważ jest to relacyjny db ma ograniczenia kluczowe. Czy jest jakieś narzędzie, które mógłbym użyć do tego?Opróżnij schemat relacyjnej bazy danych

+0

Nie znam narzędzia, które może to zrobić, ale może nie być konieczne. Sztuką jest usuwanie z tabel we właściwej kolejności. Kiedyś musiałem to zrobić w Oracle. Oracle ma własne tabele, które zawierają informacje o wszystkich relacjach między tabelami, które utworzyłem. Poprzez kwerendę dotyczącą tego metatable, udało mi się uzyskać prawidłową kolejność relacji w celu usunięcia bez nigdy uderzenia naruszenia klucza naruszenia (publikuję jako komentarz, ponieważ nie wiem, czy jest to możliwe w MySQL). Inną (i szybciej działającą) opcją jest wyłączenie ograniczeń, obcinanie, ponowne włączanie wiązań. – FrustratedWithFormsDesigner

Odpowiedz

7

Najprostszym sposobem na wykonanie tej czynności jest prawdopodobnie wyłączenie sprawdzania klucza obcego, a następnie obcięcie tabel. Ponieważ klucze obce są wyłączone, kolejność, w której obcina się tabele, nie ma znaczenia.

set foreign_key_checks = 0; 
truncate table parent; 
truncate table child; 
truncate table ... 

Możesz nawet użyć atrybutu information_schema, aby wygenerować dla ciebie wyciągi z tabeli skróconych. Coś takiego:

select concat('truncate table ',table_schema,'.',table_name,';') as sql_stmt 
from information_schema.tables 
where table_schema = 'your_schema_name' 
and table_type = 'base table'; 
+0

Dzięki za pomoc. Rozwiązano problem. –

2

Można tymczasowo upuścić lub wyłączyć wszystkie wiązania, obetnąć wszystkie tabele, a następnie przywrócić wiązania. Podjąłem to podejście dla SQL Server i działa dobrze.

http://lists.mysql.com/mysql/194954

Być może nawet lepszym rozwiązaniem byłoby, aby odwrócić się do schematu skryptów (które można umieścić pod kontrolą wersji), a następnie odtworzyć bazę danych od podstaw.

+0

Dzięki. Spróbuję tych rozwiązań. –

+0

Dzięki, rozwiązałeś problem. –

Powiązane problemy