I SQLite kan du bruge IF NOT EXISTS
klausul i CREATE TABLE
sætning for at kontrollere, om en tabel eller visning med samme navn allerede findes i databasen, før den oprettes.
Oprettelse af en tabel uden denne klausul ville normalt resultere i en fejl, hvis en tabel med samme navn allerede eksisterede i databasen. Men når du bruger HVIS IKKE FINDER
klausul, sætningen har ingen effekt, hvis der allerede findes en tabel med samme navn.
Eksempel
Her er et eksempel til demonstration:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Her t1
er tabelnavnet, og alt mellem parenteserne er tabeldefinitionen (dvs. kolonner osv.).
I så fald vil tabellen kun blive oprettet, hvis der ikke allerede er en tabel eller visning kaldet t1
.
Tjek, at tabellen nu eksisterer
Vi kan forespørge på sqlite_schema
tabel for at kontrollere, om tabellen nu eksisterer:
SELECT EXISTS (
SELECT
name
FROM
sqlite_schema
WHERE
type='table' AND
name='t1'
);
Resultat:
1
I dette tilfælde får jeg 1
, hvilket betyder, at tabellen eksisterer.
Prøv at oprette tabellen igen
Hvis vi forsøger at oprette den tabel igen:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Vi får ikke en fejl:
sqlite> CREATE TABLE IF NOT EXISTS t1 ( c1 INT, c2 VARCHAR(10) ); sqlite>
Vi får ingenting.
Uden HVIS IKKE FINDER
Klausul
Her er, hvad der sker, når vi ikke bruger
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Denne gang får vi en fejlmeddelelse:
Error: table t1 already exists
Bemærk, at HVIS IKKE FINDER
klausul kontrollerer ikke tabelstrukturen/definitionen. Den kontrollerer simpelthen, at der ikke er nogen eksisterende tabel eller visning med det samme navn, som vi forsøger at give til den tabel, vi opretter.
Sagt på en anden måde, bare fordi en tabel med det navn allerede eksisterer, betyder det ikke, at den har den korrekte definition.
Desuden returneres der stadig en fejl, hvis tabellen ikke kan oprettes på grund af et eksisterende indeks, selvom HVIS IKKE FINDER
klausul er specificeret.