sql >> Database teknologi >  >> RDS >> Mysql

Sådan kontrolleres, om en tabel allerede eksisterer, før du opretter den i MySQL

I MySQL kan du bruge HVIS IKKE FINDER klausul i 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 HVIS IKKE FINDER klausul, når du forsøger at oprette en tabel, der allerede eksisterer:

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.


  1. Brug af et alias i SQL-beregninger

  2. IRI produktnomenklatur og arkitektur

  3. Entity framework meget langsom at indlæse for første gang efter hver kompilering

  4. Sådan løses ude af stand til at skifte kodningsfejlen, når du indsætter XML i SQL Server