Es klingt, als ob Sie versuchen, Tabellen mit Fremdschlüsseldefinitionen zu sichern, und Sie sicherstellen möchten, dass die übergeordneten Tabellen zuerst ausgegeben werden, damit die "untergeordneten" Tabellen ihre Fremdschlüsseldefinitionen sicherstellen können wird funktionieren.
Dies ist generell nicht möglich, da zyklische Abhängigkeiten möglich sind.
Zum Beispiel, wenn Sie users
und teams
haben, wo jeder Benutzer einen Verweis auf das Team hat sie angehören, aber teams
hat auch einen Verweis captain
auf den spezifischen Benutzer, der das Team Kapitän, sind Sie zuerst users
auflisten möchten oder teams
zuerst?
Eine alternative Lösung besteht darin, alle Tabellen in beliebiger Reihenfolge auszugeben, jedoch ohne Fremdschlüsseldefinitionen. Nachdem alle Tabellen und ihre Daten aufgelistet wurden, folgen Sie diesen Anweisungen mit ALTER TABLE...ADD FOREIGN KEY
Befehlen.
Eine andere alternative Lösung - die von mysqldump verwendete - ist am Anfang SET FOREIGN_KEY_CHECKS=0
. Dann können Sie die Fremdschlüsseleinschränkungen definieren, ohne sich Gedanken darüber machen zu müssen, ob die referenzierte Tabelle noch erstellt wurde. Die Tabellen werden in alphabetischer Reihenfolge ausgegeben.
Aber um Ihre Frage direkter zu beantworten: Sie können mit dem INFORMATION_SCHEMA herausfinden, welche Tabellenabhängigkeiten existieren.
SELECT table_schema, table_name,
GROUP_CONCAT(column_name ORDER BY ordinal_position) AS `columns`,
MAX(referenced_table_schema) AS referenced_table_schema,
MAX(referenced_table_name) AS referenced_table_name,
GROUP_CONCAT(referenced_column_name ORDER BY ordinal_position) AS `ref_columns`
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE referenced_table_schema IS NOT NULL
GROUP BY table_schema, table_name;
MySQL unterstützt keine rekursiven Abfragen bis MySQL 8.0 (die noch in der Entwicklung). Sie müssen also wahrscheinlich die Abhängigkeitsdaten in Ihre Anwendung holen und die Reihenfolge ermitteln, in der sie deponiert werden sollen.
Aber Sie werden immer noch nicht in der Lage sein, Zyklen auf diese Weise zu behandeln. Sie müssen eine der oben beschriebenen Alternativen verwenden.
Das macht einfach keinen Sinn. – Mjh
Aus irgendeinem Grund muss ich eine JSON-Datei erstellen. – Buglinjo