sql >> Databasteknik >  >> RDS >> SQLite

Hur man skapar en tabell endast om den inte finns i SQLite

I SQLite kan du använda OM INTE FINNS satsen i CREATE TABLE för att kontrollera om en tabell eller vy med samma namn redan finns i databasen innan den skapas.

Att skapa en tabell utan denna sats skulle normalt resultera i ett fel om en tabell med samma namn redan fanns i databasen. Men när du använder OM INTE FINNS sats, satsen har ingen effekt om det redan finns en tabell med samma namn.

Exempel

Här är ett exempel att visa:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Här, t1 är tabellnamnet, och allt mellan parenteserna är tabelldefinitionen (d.v.s. kolumner, etc).

I så fall kommer tabellen bara att skapas om det inte redan finns en tabell eller vy som heter t1 .

Kontrollera att tabellen nu finns

Vi kan fråga sqlite_schema tabell för att kontrollera om tabellen nu finns:

SELECT EXISTS (
    SELECT 
        name
    FROM 
        sqlite_schema 
    WHERE 
        type='table' AND 
        name='t1'
    );

Resultat:

1

I det här fallet får jag 1 , vilket betyder att tabellen existerar.

Försök att skapa tabellen igen

Om vi ​​försöker skapa den tabellen igen:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Vi får inget felmeddelande:

sqlite> CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);
sqlite> 

Vi får ingenting.

Utan OM INTE FINNS Klausul

Det här är vad som händer när vi inte använder OM INTE FINNS klausul när du försöker skapa en tabell som redan finns:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Den här gången får vi ett felmeddelande:

Error: table t1 already exists

Observera att OM INTE FINNS klausul kontrollerar inte tabellstrukturen/definitionen. Den kontrollerar helt enkelt att det inte finns någon befintlig tabell eller vy med samma namn som vi försöker ge till tabellen som vi skapar.

Med andra ord, bara för att en tabell med det namnet redan finns, betyder det inte att den har rätt definition.

Dessutom returneras ett fel fortfarande om tabellen inte kan skapas på grund av ett befintligt index, även om OM INTE FINNS klausul specificeras.


  1. Förstå HAProxy-statistiken för MySQL och PostgreSQL

  2. SQL Server Trigger:Förståelse och alternativ

  3. NEW_TIME() Funktion i Oracle

  4. PostgreSQL 12:Implementering av K-Nearest Neighbor Space Partitioned Generalized Search Tree Index