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

Sådan opretter du kun en tabel, hvis den ikke findes i SQLite

I SQLite kan du bruge IF NOT EXISTS klausul i CREATE TABLE sætning for at kontrollere, om en tabel eller visning med samme navn allerede findes i databasen, før den oprettes.

Oprettelse af en tabel uden denne klausul ville normalt resultere i en fejl, hvis en tabel med samme navn allerede eksisterede i databasen. Men når du bruger HVIS IKKE FINDER klausul, sætningen har ingen effekt, hvis der allerede findes en tabel med samme navn.

Eksempel

Her er et eksempel til demonstration:

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

Her t1 er tabelnavnet, og alt mellem parenteserne er tabeldefinitionen (dvs. kolonner osv.).

I så fald vil tabellen kun blive oprettet, hvis der ikke allerede er en tabel eller visning kaldet t1 .

Tjek, at tabellen nu eksisterer

Vi kan forespørge på sqlite_schema tabel for at kontrollere, om tabellen nu eksisterer:

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

Resultat:

1

I dette tilfælde får jeg 1 , hvilket betyder, at tabellen eksisterer.

Prøv at oprette tabellen igen

Hvis vi forsøger at oprette den tabel igen:

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

Vi får ikke en fejl:

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

Vi får ingenting.

Uden HVIS IKKE FINDER Klausul

Her er, hvad der sker, når vi ikke bruger HVIS IKKE FINDER klausul, når du forsøger at oprette en tabel, der allerede eksisterer:

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

Denne gang får vi en fejlmeddelelse:

Error: table t1 already exists

Bemærk, at HVIS IKKE FINDER klausul kontrollerer ikke tabelstrukturen/definitionen. Den kontrollerer simpelthen, at der ikke er nogen eksisterende tabel eller visning med det samme navn, som vi forsøger at give til den tabel, vi opretter.

Sagt på en anden måde, bare fordi en tabel med det navn allerede eksisterer, betyder det ikke, at den har den korrekte definition.

Desuden returneres der stadig en fejl, hvis tabellen ikke kan oprettes på grund af et eksisterende indeks, selvom HVIS IKKE FINDER klausul er specificeret.


  1. psql:FATAL:Peer-godkendelse mislykkedes for brugerudvikler

  2. Sådan konfigureres automatisk failover for Moodle MySQL-databasen

  3. få adgang til et kolonnealias i where-sætningen i postgresql

  4. Sådan fejlfindes MySQL-databaseproblemer