V MySQL můžete použít IF NOT EXISTS
klauzule CREATE TABLE
pro kontrolu, zda v databázi již existuje tabulka se stejným názvem.
Pokud tabulka neexistuje, bude vytvořena. Pokud již existuje, nebude vytvořen.
Příklad
Jde to takto:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Kde 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 již neexistuje žádná s názvem t1
.
Zkontrolujte, zda tabulka nyní existuje
Můžeme použít sys.table_exists()
postup pro kontrolu, zda tabulka nyní existuje:
CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
Výsledek:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Zde test
je název databáze a t1
je název tabulky, jejíž existenci ověřuji.
V tomto případě je výsledkem BASE TABLE
což znamená, že tabulka existuje.
Toto je jen jeden z mnoha způsobů, jak zkontrolovat, zda tabulka v MySQL existuje.
Zkuste znovu vytvořit tabulku
Nyní, když se pokusíme vytvořit tuto tabulku znovu:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Nedostaneme chybu:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Ale dostáváme varování.
Podívejme se tedy na varování:
SHOW WARNINGS;
Výsledek:
+-------+------+---------------------------+ | Level | Code | Message | +-------+------+---------------------------+ | Note | 1050 | Table 't1' already exists | +-------+------+---------------------------+
Podle očekávání nám říká, že tabulka již existuje.
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 1050 (42S01): Table 't1' already exists
Je důležité si uvědomit, že IF NOT EXISTS
klauzule nekontroluje strukturu/definici tabulky. Jednoduše zkontroluje, že neexistuje žádná tabulka se stejným názvem, který se pokoušíme dát tabulce, kterou vytváříme.
Jinými slovy, to, že tabulka s tímto názvem již existuje, neznamená, že má správnou definici.