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
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.