Kann mir jemand sagen, ob es einen Unterschied gibt zwischen
DROP IF EXISTS [TABLE_NAME]
DROP [TABLE_NAME]
Ich frage dies, weil ich die JDBC-Vorlage in meiner MVC-Webanwendung verwende. Wenn ich DROP [TABLE_NAME]
den Fehler benutze , sagte diese Tabelle vorhanden. Und wenn ich es benutze DROP IF EXISTS [TABLE_NAME]
, steht schlechte SQL-Grammatik. Kann jemand helfen?
sql
drop-table
AbdulAziz
quelle
quelle
Antworten:
Standard SQL Syntax ist
IF EXISTS
ist nicht Standard; Verschiedene Plattformen unterstützen es möglicherweise mit unterschiedlicher Syntax oder überhaupt nicht. In PostgreSQL lautet die SyntaxDer erste gibt einen Fehler aus, wenn die Tabelle nicht vorhanden ist oder wenn andere Datenbankobjekte davon abhängen. In den meisten Fällen handelt es sich bei den anderen Datenbankobjekten um Fremdschlüsselreferenzen, möglicherweise jedoch auch um andere. (Ansichten zum Beispiel.) Die zweite gibt keinen Fehler aus, wenn die Tabelle nicht vorhanden ist, aber sie gibt trotzdem einen Fehler aus, wenn andere Datenbankobjekte davon abhängen.
Verwenden Sie eines dieser Elemente, um eine Tabelle und alle anderen davon abhängigen Objekte zu löschen.
Verwenden Sie CASCADE mit großer Sorgfalt.
quelle
CASCADE
innerhalb eines Transaktionsblocks zu verwenden (BEGIN
...COMMIT
). Auf diese Weise ist klar, wie die Datenbank beeinflusst wird, bevor möglicherweise eine Reihe von Daten überlastet werden, die Sie möglicherweise nicht wollten.Es ist nicht das, was direkt gefragt wird. Aber als ich suchte, wie man Tische richtig fallen lässt, stolperte ich über diese Frage, wie ich denke, viele andere auch.
Ab SQL Server 2016+ können Sie verwenden
Für SQL Server <2016 mache ich Folgendes für eine permanente Tabelle
Oder dies für eine temporäre Tabelle
quelle
Sie haben das
table
in Ihrer Syntax vergessen :das lässt einen Tisch fallen.
Verwenden von
Überprüft, ob die Tabelle vorhanden ist, bevor sie gelöscht wird.
Wenn es existiert, wird es fallen gelassen.
Wenn nicht, wird kein Fehler ausgegeben und es werden keine Maßnahmen ergriffen.
quelle
Zunächst wird geprüft, ob die Tabelle vorhanden ist. Wenn dies der Fall ist, wird die Tabelle währenddessen gelöscht
Es wird ohne Überprüfung gelöscht. Wenn es nicht vorhanden ist, wird es mit einem Fehler beendet
quelle
Wenn keine Tabelle mit einem solchen Namen vorhanden ist,
DROP
schlägt dies mit einem Fehler fehl, währendDROP IF EXISTS
nur nichts ausgeführt wird.Dies ist nützlich, wenn Sie Ihre Datenbank mit einem Skript erstellen / ändern. Auf diese Weise müssen Sie nicht manuell sicherstellen, dass frühere Versionen der Tabelle gelöscht werden. Du machst einfach eine
DROP IF EXISTS
und vergisst es.Natürlich unterstützt Ihre aktuelle DB-Engine diese Option möglicherweise nicht. Es ist schwierig, anhand der von Ihnen angegebenen Informationen mehr über den Fehler zu erfahren.
quelle
drop some_table if exists;
und die Tabellesome_table
nicht existiert.DROP
muss, dass Sie den Objekttyp angeben (TABLE
in diesem Fall)