2010-12-15 7 views
5

Ich habe eine Datenbank, die ich gesichert habe. Jetzt versuche ich, den ganzen Inhalt von der ursprünglichen db zu löschen und es zu seinem leeren Zustand wieder herzustellen. Da es sich um eine relationale Datenbank handelt, hat sie wichtige Einschränkungen. Gibt es ein Werkzeug, das ich dafür verwenden könnte?Leeren Sie ein relationales Datenbankschema

+0

Ich weiß nicht von einem Werkzeug, das dies tun kann, aber es kann nicht notwendig sein. Der Trick besteht darin, aus Tabellen in der richtigen Reihenfolge zu löschen. Ich musste das einmal in Oracle machen. Oracle hat eigene Tabellen, die Informationen über alle Beziehungen zwischen den Tabellen enthalten, die ich erstellt habe. Durch Abfragen dieser Metatabelle konnte ich die richtige Reihenfolge der Relationen erhalten, um sie zu löschen, ohne jemals eine Schlüssel-Contraint-Verletzung zu treffen (ich poste als Kommentar, weil ich nicht weiß, ob dies in MySQL möglich ist). Die andere (und schneller ablaufende) Option besteht darin, Beschränkungen zu deaktivieren, Einschränkungen zu kürzen oder wieder zu aktivieren. – FrustratedWithFormsDesigner

Antwort

7

Der einfachste Weg, dies zu tun, ist wahrscheinlich Fremdschlüssel-Prüfungen zu deaktivieren, dann die Tabellen abzuschneiden. Da Fremdschlüssel deaktiviert sind, spielt die Reihenfolge, in der Sie die Tabellen abschneiden, keine Rolle.

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

Sie können sogar das information_schema verwenden, um die truncate-Tabellenanweisungen für Sie zu generieren. Etwas wie dieses:

+0

Vielen Dank für die Hilfe. Das Problem wurde behoben. –

2

Sie können alle Einschränkungen vorübergehend löschen oder deaktivieren, alle Tabellen abschneiden und dann die Einschränkungen wiederherstellen. Ich habe diesen Ansatz für SQL Server verwendet und es funktioniert gut.

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

Vielleicht ein noch besserer Ansatz wäre, das Schema in Skripten auf links drehen (die Sie unter Versionskontrolle gestellt) und dann die Datenbank von Grund auf neu erstellen.

+0

Danke. Ich werde diese Lösungen versuchen. –

+0

Danke, löste das Problem. –