I MySQL kan du bruge CREATE TABLE
sætning for at kontrollere, om en tabel med samme navn allerede findes i databasen.
Hvis tabellen ikke eksisterer, oprettes den. Hvis den allerede findes, bliver den ikke oprettet.
Eksempel
Det går sådan her:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Hvor 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 bruge sys.table_exists()
procedure for at kontrollere, om tabellen nu eksisterer:
CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
Resultat:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Her test
er navnet på databasen og t1
er navnet på den tabel, som jeg tjekker eksistensen af.
I dette tilfælde er resultatet BASE TABLE
hvilket betyder, at tabellen eksisterer.
Dette er blot en af mange måder at kontrollere, om der findes en tabel i MySQL.
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.00 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
Det er vigtigt at bemærke, 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.