V SQLite můžete použít IF NOT EXISTS
klauzule CREATE TABLE
pro kontrolu, zda tabulka nebo pohled se stejným názvem již v databázi existuje před jejím vytvořením.
Vytvoření tabulky bez této klauzule by normálně vedlo k chybě, pokud by v databázi již existovala tabulka se stejným názvem. Ale při použití IF NOT EXISTS
klauzule, příkaz nemá žádný účinek, pokud již tabulka se stejným názvem existuje.
Příklad
Zde je příklad k demonstraci:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Zde t1
je název tabulky a vše v závorkách je definice tabulky (tj. sloupce atd.).
V takovém případě bude tabulka vytvořena pouze v případě, že ještě neexistuje tabulka nebo pohled s názvem t1
.
Zkontrolujte, zda tabulka nyní existuje
Můžeme se zeptat na sqlite_schema
tabulka a zkontrolujte, zda tabulka nyní existuje:
SELECT EXISTS (
SELECT
name
FROM
sqlite_schema
WHERE
type='table' AND
name='t1'
);
Výsledek:
1
V tomto případě dostanu 1
, což znamená, že tabulka existuje.
Zkuste znovu vytvořit tabulku
Pokud se pokusíme vytvořit tuto tabulku znovu:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Nedostaneme chybu:
sqlite> CREATE TABLE IF NOT EXISTS t1 ( c1 INT, c2 VARCHAR(10) ); sqlite>
Nedostáváme nic.
Bez IF NOT EXISTS
Ustanovení
Co se stane, když nepoužijeme IF NOT EXISTS
klauzule při pokusu o vytvoření tabulky, která již existuje:
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Tentokrát se zobrazí chyba:
Error: table t1 already exists
Všimněte si, že IF NOT EXISTS
klauzule nekontroluje strukturu/definici tabulky. Jednoduše zkontroluje, že neexistuje žádná tabulka nebo pohled se stejným názvem, který se snažíme přiřadit tabulce, kterou vytváříme.
Jinými slovy, to, že tabulka s tímto názvem již existuje, neznamená, že má správnou definici.
Chyba se také stále vrací, pokud tabulku nelze vytvořit kvůli existujícímu indexu, i když IF NOT EXISTS
je specifikována klauzule.