I SQLite kan du använda 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
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.