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