SQLite
 sql >> Base de données >  >> RDS >> SQLite

Comment créer une table uniquement si elle n'existe pas dans SQLite

Dans SQLite, vous pouvez utiliser le IF NOT EXISTS clause de la CREATE TABLE pour vérifier si une table ou une vue du même nom existe déjà dans la base de données avant de la créer.

La création d'une table sans cette clause entraînerait normalement une erreur si une table du même nom existait déjà dans la base de données. Mais lors de l'utilisation de IF NOT EXISTS clause, l'instruction n'a aucun effet si une table existe déjà avec le même nom.

Exemple

Voici un exemple pour illustrer :

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

Ici, t1 est le nom de la table, et tout ce qui est entre parenthèses est la définition de la table (c'est-à-dire les colonnes, etc.).

Dans ce cas, la table ne sera créée que s'il n'y a pas déjà une table ou une vue appelée t1 .

Vérifiez que la table existe maintenant

Nous pouvons interroger le sqlite_schema table pour vérifier si la table existe maintenant :

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

Résultat :

1

Dans ce cas, j'obtiens 1 , ce qui signifie que la table existe.

Essayez de recréer le tableau

Si nous tentons de recréer cette table :

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

Nous n'obtenons pas d'erreur :

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

Nous n'obtenons rien.

Sans le IF NOT EXISTS Article

Voici ce qui se passe lorsque nous n'utilisons pas le IF NOT EXISTS clause lors de la tentative de création d'une table qui existe déjà :

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

Cette fois, nous obtenons une erreur :

Error: table t1 already exists

Notez que le IF NOT EXISTS La clause ne vérifie pas la structure/définition de la table. Il vérifie simplement qu'il n'y a pas de table ou de vue existante avec le même nom que nous essayons de donner à la table que nous créons.

Autrement dit, ce n'est pas parce qu'une table de ce nom existe déjà qu'elle a la bonne définition.

De plus, une erreur est toujours renvoyée si la table ne peut pas être créée en raison d'un index existant, même si le IF NOT EXISTS clause est spécifiée.