sql >> Databáze >  >> RDS >> MariaDB

Vytvořte tabulku pouze v případě, že v MariaDB neexistuje

V MariaDB můžete použít IF NOT EXISTS klauzule CREATE TABLE pro kontrolu, zda stejnojmenná tabulka již v databázi existuje, než ji vytvoříte.

Tabulka bude vytvořena pouze v případě, že ještě neexistuje žádná se stejným názvem.

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 již neexistuje žádná s názvem t1 .

Zkontrolujte, zda tabulka nyní existuje

Můžeme se dotazovat na information_schema.tables tabulka a zkontrolujte, zda tabulka nyní existuje:

SELECT EXISTS (
    SELECT 
        TABLE_NAME
    FROM 
    information_schema.tables 
    WHERE 
    TABLE_SCHEMA LIKE 'zap' AND 
        TABLE_TYPE LIKE 'BASE TABLE' AND
        TABLE_NAME = 't1'
    );

Výsledek:

1

Zde zap je název databáze a t1 je název tabulky, jejíž existenci ověřuji.

1 znamená, že tabulka existuje. Pokud by neexistoval, dostali bychom 0 .

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.002 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

Všimněte si, že IF NOT EXISTS klauzule nekontroluje strukturu/definici tabulky. Jednoduše zkontroluje, že neexistuje žádná existující 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.


  1. PHP mysql prohledává více tabulek pomocí klíčového slova

  2. Jak zajistit, aby vaše databáze MySQL nebo MariaDB byla vysoce dostupná na AWS a Google Cloud

  3. Funkce vytvoření PostgreSQL

  4. Je zaručeno zachování objednávky v dílčím dotazu?