In SQLite können Sie den IF NOT EXISTS
verwenden -Klausel von CREATE TABLE
-Anweisung, um zu prüfen, ob eine Tabelle oder Ansicht mit demselben Namen bereits in der Datenbank vorhanden ist, bevor sie erstellt wird.
Das Erstellen einer Tabelle ohne diese Klausel würde normalerweise zu einem Fehler führen, wenn eine Tabelle mit demselben Namen bereits in der Datenbank existiert. Aber bei Verwendung des IF NOT EXISTS
-Klausel, Die Anweisung hat keine Wirkung, wenn bereits eine Tabelle mit demselben Namen existiert.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Hier t1
ist der Tabellenname, und alles zwischen den Klammern ist die Tabellendefinition (d. h. Spalten usw.).
In diesem Fall wird die Tabelle nur erstellt, wenn noch keine Tabelle oder Ansicht mit dem Namen t1
vorhanden ist .
Überprüfen Sie, ob die Tabelle jetzt existiert
Wir können das sqlite_schema
abfragen Tabelle, um zu prüfen, ob die Tabelle jetzt existiert:
SELECT EXISTS (
SELECT
name
FROM
sqlite_schema
WHERE
type='table' AND
name='t1'
);
Ergebnis:
1
In diesem Fall bekomme ich 1
, was bedeutet, dass die Tabelle existiert.
Versuchen Sie erneut, die Tabelle zu erstellen
Wenn wir versuchen, diese Tabelle erneut zu erstellen:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Wir erhalten keinen Fehler:
sqlite> CREATE TABLE IF NOT EXISTS t1 ( c1 INT, c2 VARCHAR(10) ); sqlite>
Wir bekommen nichts.
Ohne den IF NOT EXISTS
Klausel
Folgendes passiert, wenn wir IF NOT EXISTS
nicht verwenden -Klausel, wenn versucht wird, eine bereits vorhandene Tabelle zu erstellen:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Dieses Mal erhalten wir einen Fehler:
Error: table t1 already exists
Beachten Sie, dass der IF NOT EXISTS
-Klausel überprüft nicht die Tabellenstruktur/-definition. Es überprüft einfach, ob es keine vorhandene Tabelle oder Ansicht mit demselben Namen gibt, den wir der Tabelle zu geben versuchen, die wir erstellen.
Anders ausgedrückt:Nur weil eine Tabelle mit diesem Namen bereits existiert, bedeutet das nicht, dass sie die richtige Definition hat.
Außerdem wird immer noch ein Fehler zurückgegeben, wenn die Tabelle aufgrund eines vorhandenen Indexes nicht erstellt werden kann, selbst wenn IF NOT EXISTS
-Klausel angegeben ist.