"Create table if not exists" - zu prüfen, wie das schema, zu?
Ist es ein (mehr oder weniger) standard-Weg, um zu überprüfen nicht nur, ob eine Tabelle mit dem Namen mytable
existiert, sondern auch, ob das schema ist ähnlich zu dem, was es sein sollte? Ich experimentiere mit H2-Datenbank, und
CREATE TABLE IF NOT EXISTS mytable (....)
Aussagen scheinbar nur die Kontrollkästchen für die Tabellen Namen. Ich würde erwarten, dass man eine Ausnahme, wenn es eine Tabelle mit dem angegebenen Namen, aber mit einem anderen schema.
"ein Tisch mit einem ähnlichen Namen"? "ein schema ähnlich zu dem, was es sein sollte"? Das ist zu vage für eine Allgemeine-Abfrage-tool zu verstehen.
+1 weil ich möchte, dass eine solche Anlage auch, obwohl. Nicht unbedingt von der Datenbank, sondern in einem Werkzeug/Bibliothek.
Es war sein soll "- Tabelle mit dem angegebenen Namen", ist jetzt behoben. Von "schema ähnlich zu dem, was es sein sollte" meine ich, dass, wenn es existiert eine Tabelle mit dem Namen
Nette Idee, möchte auch so etwas! Ich habe noch nie gehört, ein SQL-Konstrukt in der Lage, dies zu tun, obwohl.
+1 weil ich möchte, dass eine solche Anlage auch, obwohl. Nicht unbedingt von der Datenbank, sondern in einem Werkzeug/Bibliothek.
Es war sein soll "- Tabelle mit dem angegebenen Namen", ist jetzt behoben. Von "schema ähnlich zu dem, was es sein sollte" meine ich, dass, wenn es existiert eine Tabelle mit dem Namen
mytable
, das schema muss gleich was ich auf die Abfrage; ansonsten möchte ich, um irgendeine Art von Fehler. Dies ist eine sehr gut-definierte Abfrage, so Frage ich mich, ob (und wenn nicht, warum nicht), es ist ein Weg, um es auszudrücken. Eigentlich war ich überrascht, dass "WENN NICHT VORHANDEN" scheint zu prüfen, nur den Namen.Nette Idee, möchte auch so etwas! Ich habe noch nie gehört, ein SQL-Konstrukt in der Lage, dies zu tun, obwohl.
InformationsquelleAutor Joonas Pulakka | 2010-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
CREATE TABLE IF NOT EXISTS ...
ist nicht ein standard-SQL-code.Das, was zu tun ist, um zu überprüfen, ob die Tabelle bereits im Katalog.
Zum Beispiel in Java, die Sie tun können, so etwas wie:
connection.getMetaData().getTables(connection.getCatalog(), null, null, null)
Weitere Infos finden Sie unter javadoc java.sql.Verbindung.
InformationsquelleAutor Kru
Ich macht, was Sie sagen, es tut... Es wird überprüft, ob eine solche Tabelle existiert in der Datenbank. Die
INFORMATION_SCHEMA
ist (etwas) standardisiert, damit diese Anweisung funktioniert in den meisten Datenbanken.es funktioniert in MSSQL als gut, aber es gibt das "Standard" schema "dbo"
Was diese Antwort nicht tun, ist zu zeigen, wie vergleichen Sie das schema. Es kommt näher, obwohl. Könnte man eine Abfrage verwenden, die gegen
INFORMATION_SCHEMA.COLUMNS
und prüfen, ob die vorhandenen Spalten übereinstimmen, was erwartet wird und reagieren. Ich denke aber, dass mit so etwas wie benannt/nummeriert Migrationen und Völkerwanderungen Tabelle, wie Entity Framework unterstützt, wäre es einfacher und weniger fehleranfällig—vor allem, wenn Sie brauchen, um vorhandene Daten beibehalten, aber ändern, wie es gespeichert ist wegen schema-änderungen.InformationsquelleAutor isapir
Zweifache Antwort :
(a) Die Existenz einer Tabelle ist etwas, dass sichergestellt werden sollte durch die installation einer Anwendung, die nicht durch die Anwendung selbst zur Laufzeit.
(b) Wenn Sie wirklich denken, Sie haben einen triftigen Grund für die Abweichung von (a), könnten Sie versuchen, die Abfrage der Katalog ist eine Datenbank, bestehend aus Tabellen, deren Struktur ist, mehr oder weniger, die durch das INFORMATION_SCHEMA des SQL-Standards. Welche Tabellen existieren, welche Spalten Sie haben, welche Datentypen die Spalten sind, die Tasten werden erklärt, usw.. etc., es ist alles vorhanden.
Ja, ich denke auch, dass, während eine) kann den üblichen Weg zu gehen, ist es ähnlich, sagen wir, "die Existenz von" C: "- Laufwerk ist etwas, dass sichergestellt werden sollte durch die installation einer Anwendung, die nicht durch die Anwendung selbst zur Laufzeit.". Aber eine ernsthafte Anwendung sollte keine Annahmen machen über die Umwelt. Stattdessen sollten Sie es prüfen. Umgebungen verändern können - und früher oder später werden Sie.
InformationsquelleAutor Erwin Smout
Ich bin nicht bewusst jede Datenbank, die diese Funktion nativ.
Habe es nicht (gerollt meinem eigenen code, dies zu tun), aber vielleicht Apache DdlUtils helfen können.
Es ist eine heikle Sache zu tun, vor allem, wenn Sie wollen, dass es funktioniert mit verschiedenen Datenbank-Anbietern.
Auch gibt es wohl unterschiedliche Meinungen darüber, wie ähnlich das schema sein muss, um zu bestehen. Spaltennamen, Spalten -, um -, Spalten-Typen, primary key definition: sicherlich. Aber wie wäre es Einschränkungen, die Namen der Einschränkungen, Tablespace-Definitionen, und so weiter?
InformationsquelleAutor Thilo