W MariaDB 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 przed jej utworzeniem.
Tabela zostanie utworzona tylko wtedy, gdy nie ma jeszcze tabeli o tej samej nazwie.
Przykład
Oto przykład do zademonstrowania:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Tutaj, 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 wysłać zapytanie do information_schema.tables
tabela, aby sprawdzić, czy tabela już istnieje:
SELECT EXISTS (
SELECT
TABLE_NAME
FROM
information_schema.tables
WHERE
TABLE_SCHEMA LIKE 'zap' AND
TABLE_TYPE LIKE 'BASE TABLE' AND
TABLE_NAME = 't1'
);
Wynik:
1
Tutaj, zap
to nazwa bazy danych, a t1
to nazwa tabeli, której istnienie sprawdzam.
1
oznacza, że tabela istnieje. Gdyby nie istniał, otrzymalibyśmy 0
.
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.002 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
Zauważ, ż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ę.