sql >> Databasteknik >  >> RDS >> MariaDB

Skapa bara en tabell om den inte finns i MariaDB

I MariaDB 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 innan den skapas.

Tabellen skapas bara om det inte redan finns en med samma namn.

Exempel

Här är ett exempel att visa:

CREATE TABLE IF NOT EXISTS t1 (
  c1 INT,
  c2 VARCHAR(10)
);

Hä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 fråga information_schema.tables tabell för att kontrollera om tabellen nu finns:

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

Här, zap är namnet på databasen och t1 är namnet på tabellen som jag kontrollerar existensen av.

1 betyder att tabellen finns. Om det inte fanns skulle vi få 0 .

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

Observera 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. Hur man uppdaterar en kolumn baserat på ett filter i en annan kolumn

  2. Aktivera MySQL InnoDB Storage Engine Support i XAMPP-installation

  3. Kan Postgres-datatypen NUMERIC lagra signerade värden?

  4. SQLite infogar inte data i den andra tabellen