sql >> Database >  >> RDS >> SQLite

Alleen een tabel maken als deze niet in SQLite bestaat

In SQLite kun je de IF NOT EXISTS . gebruiken clausule van de CREATE TABLE instructie om te controleren of een tabel of weergave met dezelfde naam al in de database bestaat voordat u deze maakt.

Het maken van een tabel zonder deze clausule zou normaal gesproken resulteren in een fout als er al een tabel met dezelfde naam in de database bestaat. Maar bij gebruik van de IF NOT EXISTS clausule, de instructie heeft geen effect als er al een tabel bestaat met dezelfde naam.

Voorbeeld

Hier is een voorbeeld om te demonstreren:

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

Hier, t1 is de tabelnaam en alles tussen de haakjes is de tabeldefinitie (d.w.z. kolommen, enz.).

In dat geval wordt de tabel alleen gemaakt als er nog geen tabel of weergave is met de naam t1 .

Controleer of de tabel nu bestaat

We kunnen het sqlite_schema . opvragen tafel om te controleren of de tafel nu bestaat:

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

Resultaat:

1

In dit geval krijg ik 1 , wat betekent dat de tabel bestaat.

Probeer de tabel opnieuw te maken

Als we proberen die tabel opnieuw te maken:

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

We krijgen geen foutmelding:

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

We krijgen niets.

Zonder de IF NOT EXISTS Clausule

Dit is wat er gebeurt als we de IF NOT EXISTS niet gebruiken clausule bij het maken van een tabel die al bestaat:

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

Deze keer krijgen we een foutmelding:

Error: table t1 already exists

Merk op dat de IF NOT EXISTS clausule controleert de tabelstructuur/definitie niet. Het controleert eenvoudig of er geen bestaande tabel of weergave is met dezelfde naam die we proberen te geven aan de tabel die we maken.

Anders gezegd, alleen omdat er al een tabel met die naam bestaat, betekent dit niet dat deze de juiste definitie heeft.

Er wordt ook nog steeds een fout geretourneerd als de tabel niet kan worden gemaakt vanwege een bestaande index, zelfs als de IF NOT EXISTS clausule is gespecificeerd.


  1. Jaren aftrekken van een datum in SQLite

  2. ORA-03113:einde bestand op communicatiekanaal

  3. Hoe maak je een PL/SQL zwakke ref-cursor in Oracle Database?

  4. PostgreSQL-schema maken