sql >> Databáze >  >> RDS >> Mysql

Jak zkontrolovat, zda tabulka již existuje, než ji vytvoříte v MySQL

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.


  1. 3 způsoby, jak získat datový typ sloupce v SQL Server (T-SQL)

  2. Django:Jaké jsou nejlepší postupy pro migraci projektu ze sqlite na PostgreSQL

  3. Použití názvů služeb Oracle s SQLAlchemy

  4. SQL Server 2008:Jak udělím oprávnění uživatelskému jménu?