SQLite
 sql >> Database >  >> RDS >> SQLite

Come creare una tabella solo se non esiste in SQLite

In SQLite, puoi usare IF NOT EXISTS clausola del CREATE TABLE istruzione per verificare se una tabella o una vista con lo stesso nome esiste già nel database prima di crearla.

La creazione di una tabella senza questa clausola normalmente risulterebbe in un errore se esisteva già una tabella con lo stesso nome nel database. Ma quando si utilizza IF NOT EXISTS clausola, l'istruzione non ha effetto se esiste già una tabella con lo stesso nome.

Esempio

Ecco un esempio da dimostrare:

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

Qui, t1 è il nome della tabella e tutto ciò che è tra parentesi è la definizione della tabella (es. colonne, ecc.).

In tal caso, la tabella verrà creata solo se non esiste già una tabella o una vista denominata t1 .

Verifica che la tabella ora esista

Possiamo interrogare sqlite_schema tabella per verificare se la tabella ora esiste:

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

Risultato:

1

In questo caso ottengo 1 , il che significa che la tabella esiste.

Prova a creare di nuovo la tabella

Se proviamo a creare nuovamente quella tabella:

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

Non riceviamo un errore:

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

Non otteniamo nulla.

Senza il IF NOT EXISTS Clausola

Ecco cosa succede quando non utilizziamo il IF NOT EXISTS clausola quando si tenta di creare una tabella già esistente:

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

Questa volta riceviamo un errore:

Error: table t1 already exists

Nota che il IF NOT EXISTS La clausola non controlla la struttura/definizione della tabella. Verifica semplicemente che non ci siano tabelle esistenti o viste con lo stesso nome che stiamo cercando di assegnare alla tabella che stiamo creando.

In altre parole, solo perché esiste già una tabella con quel nome, non significa che abbia la definizione corretta.

Inoltre, viene comunque restituito un errore se non è possibile creare la tabella a causa di un indice esistente, anche se IF NOT EXISTS è specificata la clausola.