In SQLite kun je de IF NOT EXISTS
. gebruiken clausule van de CREATE TABLE
instructie om te controleren of een tabel of weergave met dezelfde naam al in de database bestaat voordat u deze maakt.
Het maken van een tabel zonder deze clausule zou normaal gesproken resulteren in een fout als er al een tabel met dezelfde naam in de database bestaat. Maar bij gebruik van de IF NOT EXISTS
clausule, de instructie heeft geen effect als er al een tabel bestaat met dezelfde naam.
Voorbeeld
Hier is een voorbeeld om te demonstreren:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Hier, t1
is de tabelnaam en alles tussen de haakjes is de tabeldefinitie (d.w.z. kolommen, enz.).
In dat geval wordt de tabel alleen gemaakt als er nog geen tabel of weergave is met de naam t1
.
Controleer of de tabel nu bestaat
We kunnen het sqlite_schema
. opvragen tafel om te controleren of de tafel nu bestaat:
SELECT EXISTS (
SELECT
name
FROM
sqlite_schema
WHERE
type='table' AND
name='t1'
);
Resultaat:
1
In dit geval krijg ik 1
, wat betekent dat de tabel bestaat.
Probeer de tabel opnieuw te maken
Als we proberen die tabel opnieuw te maken:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
We krijgen geen foutmelding:
sqlite> CREATE TABLE IF NOT EXISTS t1 ( c1 INT, c2 VARCHAR(10) ); sqlite>
We krijgen niets.
Zonder de IF NOT EXISTS
Clausule
Dit is wat er gebeurt als we de IF NOT EXISTS
niet gebruiken clausule bij het maken van een tabel die al bestaat:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Deze keer krijgen we een foutmelding:
Error: table t1 already exists
Merk op dat de IF NOT EXISTS
clausule controleert de tabelstructuur/definitie niet. Het controleert eenvoudig of er geen bestaande tabel of weergave is met dezelfde naam die we proberen te geven aan de tabel die we maken.
Anders gezegd, alleen omdat er al een tabel met die naam bestaat, betekent dit niet dat deze de juiste definitie heeft.
Er wordt ook nog steeds een fout geretourneerd als de tabel niet kan worden gemaakt vanwege een bestaande index, zelfs als de IF NOT EXISTS
clausule is gespecificeerd.