sql >> Database >  >> RDS >> MariaDB

Maak alleen een tabel als deze niet bestaat in MariaDB

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

De tabel wordt alleen gemaakt als er nog geen is 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 is met de naam t1 .

Controleer of de tabel nu bestaat

We kunnen de information_schema.tables . opvragen tafel om te controleren of de tafel nu bestaat:

SELECT EXISTS (
    SELECT 
        TABLE_NAME
    FROM 
    information_schema.tables 
    WHERE 
    TABLE_SCHEMA LIKE 'zap' AND 
        TABLE_TYPE LIKE 'BASE TABLE' AND
        TABLE_NAME = 't1'
    );

Resultaat:

1

Hier, zap is de naam van de database, en t1 is de naam van de tabel waarvan ik het bestaan ​​controleer.

De 1 betekent dat de tabel bestaat. Als het niet bestond, kregen we 0 .

Probeer de tabel opnieuw te maken

Als we nu proberen die tabel opnieuw te maken:

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

We krijgen geen foutmelding:

Query OK, 0 rows affected, 1 warning (0.002 sec)

Maar we krijgen wel een waarschuwing.

Dus laten we de waarschuwing eens bekijken:

SHOW WARNINGS;

Resultaat:

+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1050 | Table 't1' already exists |
+-------+------+---------------------------+

Zoals verwacht, vertelt het ons dat de tabel al bestaat.

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 1050 (42S01): 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 is met dezelfde naam die we proberen te geven aan de tabel die we maken.

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


  1. Bandbreedtevriendelijke queryprofilering voor Azure SQL Database

  2. Een IF-statement gebruiken in een MySQL SELECT-query

  3. ExecuteNonQuery:verbindingseigenschap is niet geïnitialiseerd.

  4. Getallen opmaken in MySQL