W SQLite możesz użyć IF NOT EXISTS
klauzula CREATE TABLE
oświadczenie, aby sprawdzić, czy tabela lub widok o tej samej nazwie już istnieje w bazie danych przed jej utworzeniem.
Utworzenie tabeli bez tej klauzuli normalnie spowodowałoby błąd, jeśli tabela o tej samej nazwie już istniała w bazie danych. Ale kiedy używasz IF NOT EXISTS
klauzula, instrukcja nie działa, jeśli tabela o tej samej nazwie już istnieje.
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 ma jeszcze tabeli lub widoku o nazwie t1
.
Sprawdź, czy tabela już istnieje
Możemy zapytać o sqlite_schema
tabela, aby sprawdzić, czy tabela już istnieje:
SELECT EXISTS (
SELECT
name
FROM
sqlite_schema
WHERE
type='table' AND
name='t1'
);
Wynik:
1
W tym przypadku otrzymam 1
, co oznacza, że tabela istnieje.
Spróbuj ponownie utworzyć stół
Jeśli spróbujemy ponownie utworzyć tę tabelę:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Nie pojawia się błąd:
sqlite> CREATE TABLE IF NOT EXISTS t1 ( c1 INT, c2 VARCHAR(10) ); sqlite>
Nic nie dostajemy.
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: table t1 already exists
Zauważ, że IF NOT EXISTS
klauzula nie sprawdza struktury/definicji tabeli. Po prostu sprawdza, czy nie ma istniejącej tabeli lub widoku 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, że ma poprawną definicję.
Ponadto błąd jest nadal zwracany, jeśli tabela nie może zostać utworzona z powodu istniejącego indeksu, nawet jeśli IF NOT EXISTS
określona jest klauzula.