Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment vérifier si une table existe déjà avant de la créer dans MySQL

Dans MySQL, vous pouvez utiliser le IF NOT EXISTS clause de la CREATE TABLE pour vérifier si oui ou non une table du même nom existe déjà dans la base de données.

Si la table n'existe pas, elle sera créée. S'il existe déjà, il ne sera pas créé.

Exemple

Ça se passe comme ça :

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

t1 est le nom de la table, et tout ce qui est entre parenthèses est la définition de la table (c'est-à-dire les colonnes, etc.).

Dans ce cas, la table ne sera créée que s'il n'y en a pas déjà une appelée t1 .

Vérifiez que la table existe maintenant

Nous pouvons utiliser le sys.table_exists() procédure pour vérifier si la table existe maintenant :

CALL sys.table_exists('test', 't1', @table_type); 
SELECT @table_type;

Résultat :

+-------------+
| @table_type |
+-------------+
| BASE TABLE  |
+-------------+

Ici, test est le nom de la base de données, et t1 est le nom de la table dont je vérifie l'existence.

Dans ce cas, le résultat est BASE TABLE ce qui signifie que la table existe.

Ce n'est qu'une des nombreuses façons de vérifier si une table existe dans MySQL.

Essayez de recréer le tableau

Maintenant, si nous essayons de recréer cette table :

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

Nous n'obtenons pas d'erreur :

Query OK, 0 rows affected, 1 warning (0.00 sec)

Mais nous recevons un avertissement.

Alors vérifions l'avertissement :

SHOW WARNINGS;

Résultat :

+-------+------+---------------------------+
| Level | Code | Message                   |
+-------+------+---------------------------+
| Note  | 1050 | Table 't1' already exists |
+-------+------+---------------------------+

Comme prévu, il nous indique que la table existe déjà.

Sans le IF NOT EXISTS Article

Voici ce qui se passe lorsque nous n'utilisons pas le IF NOT EXISTS clause lors de la tentative de création d'une table qui existe déjà :

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

Cette fois, nous obtenons une erreur :

ERROR 1050 (42S01): Table 't1' already exists

Il est important de noter que le IF NOT EXISTS La clause ne vérifie pas la structure/définition de la table. Il vérifie simplement qu'il n'y a pas de table existante avec le même nom que nous essayons de donner à la table que nous créons.

En d'autres termes, ce n'est pas parce qu'une table de ce nom existe déjà qu'elle a la bonne définition.