sql >> Database >  >> RDS >> Mysql

Hoe te controleren of een tabel al bestaat voordat u deze in MySQL maakt

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.


  1. Milliseconde resolutie van DateTime in Ruby

  2. Dynamisch kolommen genereren voor kruistabel in PostgreSQL

  3. Aanbevelingen voor routinematige back-up van inhoud

  4. 3 manieren om het schema van een resultatenset in SQL Server te krijgen