SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Jak utworzyć tabelę tylko wtedy, gdy nie istnieje w SQLite

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zbuduj książkę kontaktów za pomocą Pythona, PyQt i SQLite

  2. Sprawdź, czy ciąg kolumn w bazie danych jest podciągiem zapytania w sqlite

  3. Dodawaj dane do bazy danych sqlite tylko raz i czytaj wiele razy

  4. Co to jest SQLite?

  5. Android SQLite nie aktualizuje danych