sql >> Base de Datos >  >> RDS >> SQLite

Cómo crear una tabla solo si no existe en SQLite

En SQLite, puede usar IF NOT EXISTS cláusula de CREATE TABLE declaración para verificar si una tabla o vista del mismo nombre ya existe en la base de datos antes de crearla.

La creación de una tabla sin esta cláusula normalmente generaría un error si ya existiera una tabla con el mismo nombre en la base de datos. Pero al usar IF NOT EXISTS cláusula, la declaración no tiene efecto si ya existe una tabla con el mismo nombre.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

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

Aquí, t1 es el nombre de la tabla, y todo lo que está entre paréntesis es la definición de la tabla (es decir, columnas, etc.).

En ese caso, la tabla solo se creará si aún no existe una tabla o vista llamada t1 .

Compruebe que la tabla ahora existe

Podemos consultar el sqlite_schema tabla para verificar si la tabla ahora existe:

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

Resultado:

1

En este caso obtengo 1 , lo que significa que la tabla existe.

Intente crear la tabla de nuevo

Si intentamos crear esa tabla nuevamente:

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

No recibimos un error:

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

No obtenemos nada.

Sin el IF NOT EXISTS Cláusula

Esto es lo que sucede cuando no usamos IF NOT EXISTS cláusula al intentar crear una tabla que ya existe:

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

Esta vez obtenemos un error:

Error: table t1 already exists

Tenga en cuenta que IF NOT EXISTS cláusula no comprueba la estructura/definición de la tabla. Simplemente comprueba que no existe ninguna tabla o vista con el mismo nombre que estamos tratando de dar a la tabla que estamos creando.

Dicho de otra manera, el hecho de que ya exista una tabla con ese nombre no significa que tenga la definición correcta.

Además, aún se devuelve un error si la tabla no se puede crear debido a un índice existente, incluso si IF NOT EXISTS se especifica la cláusula.