I MySQL kan du använda CREATE TABLE
för att kontrollera om en tabell med samma namn redan finns i databasen.
Om tabellen inte finns skapas den. Om den redan finns skapas den inte.
Exempel
Det går så här:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Där t1
är tabellnamnet, och allt mellan parenteserna är tabelldefinitionen (d.v.s. kolumner, etc).
I så fall kommer tabellen bara att skapas om det inte redan finns en som heter t1
.
Kontrollera att tabellen nu finns
Vi kan använda sys.table_exists()
procedur för att kontrollera om tabellen nu finns:
CALL sys.table_exists('test', 't1', @table_type);
SELECT @table_type;
Resultat:
+-------------+ | @table_type | +-------------+ | BASE TABLE | +-------------+
Här, test
är namnet på databasen och t1
är namnet på tabellen som jag kontrollerar existensen av.
I det här fallet är resultatet BASE TABLE
vilket betyder att tabellen existerar.
Detta är bara ett av många sätt att kontrollera om en tabell finns i MySQL.
Försök att skapa tabellen igen
Om vi nu försöker skapa den tabellen igen:
CREATE TABLE IF NOT EXISTS t1 (
c1 INT,
c2 VARCHAR(10)
);
Vi får inget felmeddelande:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Men vi får en varning.
Så låt oss kolla varningen:
SHOW WARNINGS;
Resultat:
+-------+------+---------------------------+ | Level | Code | Message | +-------+------+---------------------------+ | Note | 1050 | Table 't1' already exists | +-------+------+---------------------------+
Som väntat säger den oss att tabellen redan finns.
Utan OM INTE FINNS
Klausul
Det här är vad som händer när vi inte använder
CREATE TABLE t1 (
c1 INT,
c2 VARCHAR(10)
);
Den här gången får vi ett felmeddelande:
ERROR 1050 (42S01): Table 't1' already exists
Det är viktigt att notera att OM INTE FINNS
klausul kontrollerar inte tabellstrukturen/definitionen. Den kontrollerar helt enkelt att det inte finns någon befintlig tabell med samma namn som vi försöker ge till tabellen som vi skapar.
Med andra ord, bara för att en tabell med det namnet redan finns, betyder det inte att den har rätt definition.