Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak sprawdzić, czy tabela już istnieje przed utworzeniem jej w MySQL?

W MySQL możesz użyć IF NOT EXISTS klauzula CREATE TABLE oświadczenie, aby sprawdzić, czy tabela o tej samej nazwie już istnieje w bazie danych.

Jeśli tabela nie istnieje, zostanie utworzona. Jeśli już istnieje, nie zostanie utworzony.

Przykład

To wygląda tak:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Gdzie t1 to nazwa tabeli, a wszystko w nawiasach to definicja tabeli (tj. kolumny itp.).

W takim przypadku tabela zostanie utworzona tylko wtedy, gdy nie istnieje jeszcze jedna o nazwie t1 .

Sprawdź, czy tabela już istnieje

Możemy użyć sys.table_exists() procedura sprawdzania, czy tabela już istnieje:

CALL sys.table_exists('test', 't1', @table_type); 
SELECT @table_type;

Wynik:

+-------------+
| @table_type |
+-------------+
| BASE TABLE  |
+-------------+

Tutaj test to nazwa bazy danych, a t1 to nazwa tabeli, której istnienie sprawdzam.

W tym przypadku wynikiem jest BASE TABLE co oznacza, że ​​tabela istnieje.

To tylko jeden z wielu sposobów sprawdzenia, czy tabela istnieje w MySQL.

Spróbuj ponownie utworzyć stół

Teraz, jeśli spróbujemy ponownie utworzyć tę tabelę:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Nie pojawia się błąd:

Query OK, 0 rows affected, 1 warning (0.00 sec)

Ale dostajemy ostrzeżenie.

Sprawdźmy więc ostrzeżenie:

SHOW WARNINGS;

Wynik:

+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1050 | Table 't1' already exists |
+-------+------+---------------------------+

Zgodnie z oczekiwaniami informuje nas, że tabela już istnieje.

Bez IF NOT EXISTS Klauzula

Oto, co się dzieje, gdy nie używamy IF NOT EXISTS klauzula podczas próby utworzenia tabeli, która już istnieje:

CREATE TABLE t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Tym razem pojawia się błąd:

ERROR 1050 (42S01): Table 't1' already exists

Należy pamiętać, że IF NOT EXISTS klauzula nie sprawdza struktury/definicji tabeli. Po prostu sprawdza, czy nie istnieje tabela o tej samej nazwie, którą próbujemy nadać tabeli, którą tworzymy.

Innymi słowy, tylko dlatego, że tabela o tej nazwie już istnieje, nie oznacza to, że ma poprawną definicję.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli::query():Nie można pobrać mysqli

  2. Jak uzyskać rekordy z ostatnich 15 dni w MySQL?

  3. Wydajność operatora MySQL IN na (dużej?) liczbie wartości

  4. Usuń tagi HTML z rekordu

  5. JSON_MERGE_PRESERVE() – Scal wiele dokumentów JSON w MySQL