sql >> Database teknologi >  >> RDS >> MariaDB

Opret kun en tabel, hvis den ikke findes i MariaDB

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

Tabellen oprettes kun, hvis der ikke allerede er en 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 kaldet t1 .

Tjek, at tabellen nu eksisterer

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

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

Resultat:

1

Her zap er navnet på databasen og t1 er navnet på den tabel, som jeg tjekker eksistensen af.

1 betyder, at bordet eksisterer. Hvis det ikke eksisterede, ville vi få 0 .

Prøv at oprette tabellen igen

Hvis vi nu forsøger at oprette den tabel igen:

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

Vi får ikke en fejl:

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

Men vi får en advarsel.

Så lad os tjekke advarslen:

SHOW WARNINGS;

Resultat:

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

Som forventet fortæller den os, at tabellen allerede eksisterer.

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 1050 (42S01): Table 't1' already exists

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

Med andre ord, bare fordi en tabel med det navn allerede eksisterer, betyder det ikke, at den har den korrekte definition.


  1. Udforsker Storage Engine-indstillinger for MariaDB

  2. Sammenføjning af tre borde ved hjælp af MySQL

  3. Sådan udskiftes en del af en streng i T-SQL

  4. 5 gode ressourcer til at hjælpe dig med at rocke din databaseovervågningsrolle