sql >> Databasteknik >  >> RDS >> Mysql

Så här kontrollerar du om en tabell redan finns innan du skapar den i MySQL

I MySQL kan du använda OM INTE FINNS satsen i 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 OM INTE FINNS klausul när du försöker skapa en tabell som redan finns:

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.


  1. Parametrar tabellnamnet i .NET/SQL?

  2. CEILING() Exempel i SQL Server

  3. Komma igång med Oracle Application Express-APEX

  4. Den serialiserbara isoleringsnivån