In MySQL kunt u de IF NOT EXISTS
. gebruiken clausule van de CREATE TABLE
statement om te controleren of er al een tabel met dezelfde naam in de database bestaat.
Als de tabel niet bestaat, wordt deze gemaakt. Als het al bestaat, wordt het niet gemaakt.
Voorbeeld
Het gaat als volgt:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Waar 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 sys.table_exists()
. gebruiken procedure om te controleren of de tabel nu bestaat:
CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
Resultaat:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Hier, test
is de naam van de database, en t1
is de naam van de tabel waarvan ik het bestaan controleer.
In dit geval is het resultaat BASE TABLE
wat betekent dat de tabel bestaat.
Dit is slechts een van de vele manieren om te controleren of een tabel bestaat in MySQL.
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.00 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
Het is belangrijk op te merken 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.