sql >> Databáze >  >> RDS >> SQLite

Jak vytvořit tabulku, pouze pokud v SQLite neexistuje

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.


  1. Jak používat indexy ke zlepšení výkonu dotazů MySQL

  2. Vlastní objednávka v Oracle SQL

  3. Oracle DROP TABLE, POKUD EXISTUJE Alternativy

  4. Dotaz ve více databázích na stejném serveru