SQLite
 sql >> Datenbank >  >> RDS >> SQLite

So erstellen Sie eine Tabelle nur, wenn sie in SQLite nicht vorhanden ist

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.