SQLite
 sql >> база данни >  >> RDS >> SQLite

Как да създадете таблица само ако тя не съществува в SQLite

В SQLite можете да използвате IF NOT EXISTS клауза на CREATE TABLE изявление, за да проверите дали таблица или изглед със същото име вече съществуват в базата данни, преди да го създадете.

Създаването на таблица без тази клауза обикновено ще доведе до грешка, ако таблица със същото име вече съществува в базата данни. Но когато използвате IF NOT EXISTS клауза, изявлението няма ефект, ако вече съществува таблица със същото име.

Пример

Ето пример за демонстрация:

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

Тук t1 е името на таблицата, а всичко между скобите е дефиницията на таблицата (т.е. колони и т.н.).

В този случай таблицата ще бъде създадена само ако вече няма таблица или изглед, наречен t1 .

Проверете дали таблицата вече съществува

Можем да потърсим sqlite_schema таблица, за да проверите дали таблицата вече съществува:

SELECT EXISTS (
    SELECT 
        name
    FROM 
        sqlite_schema 
    WHERE 
        type='table' AND 
        name='t1'
    );

Резултат:

1

В този случай получавам 1 , което означава, че таблицата съществува.

Опитайте да създадете таблицата отново

Ако се опитаме да създадем тази таблица отново:

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

Не получаваме грешка:

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

Не получаваме нищо.

Без IF NOT EXISTS Клауза

Ето какво се случва, когато не използваме IF NOT EXISTS клауза, когато се опитвате да създадете таблица, която вече съществува:

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

Този път получаваме грешка:

Error: table t1 already exists

Имайте предвид, че IF NOT EXISTS клаузата не проверява структурата/дефиницията на таблицата. Той просто проверява дали няма съществуваща таблица или изглед със същото име, което се опитваме да дадем на таблицата, която създаваме.

Казано по друг начин, само защото таблица с това име вече съществува, това не означава, че има правилната дефиниция.

Също така, все още се връща грешка, ако таблицата не може да бъде създадена поради съществуващ индекс, дори ако IF NOT EXISTS клаузата е посочена.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite преименува PRINTF() на FORMAT()

  2. Как работи SQLite Avg().

  3. SQLite - JOIN изявления

  4. Относно SQLite

  5. Получаване на NoClassDefFoundError, докато се опитвате да използвате Proguard и SQLcipher в Android