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

5 façons de vérifier si une table existe dans MySQL

Voici cinq façons de vérifier si une table existe ou non dans une base de données MySQL.

Le table_exists() Procédure

Dans MySQL, le sys.table_exists() la procédure stockée teste si une table donnée existe en tant que table normale, un TEMPORARY table ou une vue. La procédure renvoie le type de table dans un OUT paramètre.

Exemple :

CALL sys.table_exists('Music', 'Albums', @table_type); 
SELECT @table_type;

Résultat :

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

Notez que si une table temporaire et une table permanente existent avec le nom donné, TEMPORARY est renvoyé.

Le information_schema.TABLES Tableau

Une autre façon de vérifier si une table existe est d'interroger le information_schema.TABLES tableau :

SELECT 
   TABLE_SCHEMA, 
   TABLE_NAME,
   TABLE_TYPE
FROM 
   information_schema.TABLES 
WHERE 
   TABLE_SCHEMA LIKE 'music'    AND 
	TABLE_TYPE LIKE 'BASE TABLE' AND
	TABLE_NAME = 'Artists';

Résultat :

+--------------+------------+------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE |
+--------------+------------+------------+
| Music        | Artists    | BASE TABLE |
+--------------+------------+------------+

Dans ce cas, j'ai renvoyé la table de base appelée Artists de la base de données appelée music . Interroger ceci sans filtrer les résultats par TABLE_SCHEMA renvoie les tables de base de toutes les bases de données. Interroger sans filtrer par TABLE_TYPE renvoie tous les types de table.

Si nous n'avons pas besoin de toutes ces informations, nous pouvons le faire :

SELECT EXISTS (
    SELECT 
        TABLE_NAME
    FROM 
    information_schema.TABLES 
    WHERE 
    TABLE_SCHEMA LIKE 'music' AND 
        TABLE_TYPE LIKE 'BASE TABLE' AND
        TABLE_NAME = 'Artists'
    );

Résultat :

1

Ou nous pourrions obtenir le compte :

SELECT COUNT(TABLE_NAME)
FROM 
   information_schema.TABLES 
WHERE 
   TABLE_SCHEMA LIKE 'music' AND 
	TABLE_TYPE LIKE 'BASE TABLE' AND
	TABLE_NAME = 'Artists';

Résultat :

+-------------------+
| COUNT(TABLE_NAME) |
+-------------------+
|                 1 |
+-------------------+

Le SHOW TABLES Commande

Le SHOW TABLES la commande répertorie les non-TEMPORARY tables, séquences et vues dans une base de données MySQL donnée. Nous pouvons utiliser le WHERE clause pour le restreindre à un type donné.

Nous pouvons également utiliser le FULL modificateur pour renvoyer une deuxième colonne qui affiche le type :

SHOW FULL TABLES
WHERE Table_Type LIKE 'BASE TABLE'
AND Tables_in_music LIKE 'Albums';

Résultat :

+-----------------+------------+
| Tables_in_music | Table_type |
+-----------------+------------+
| Albums          | BASE TABLE |
+-----------------+------------+

Dans ce cas, le nom de la base de données est music , et donc la première colonne est Tables_in_music .

Le SHOW TABLE STATUS Commande

Dans MySQL, le SHOW TABLE STATUS La commande est similaire à la commande SHOW TABLES commande mais fournit des informations plus détaillées sur chacun (non TEMPORARY ) tableau.

Exemple :

SHOW TABLE STATUS
FROM Music
WHERE Name = 'Albums';

Résultat :

+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
| Name   | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation          | Checksum | Create_options | Comment |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+
| Albums | InnoDB |      10 | Dynamic    |   20 |            819 |       16384 |               0 |        32768 |         0 |             21 | 2021-11-13 12:56:02 | 2021-11-13 12:56:13 | NULL       | utf8mb4_0900_ai_ci |     NULL |                |         |
+--------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+------------+--------------------+----------+----------------+---------+

Le mysqlshow Client

Une autre façon de vérifier les tables dans une base de données MySQL est d'utiliser le mysqlshow client.

Pour utiliser cet utilitaire, ouvrez une invite de ligne de commande/fenêtre de terminal et exécutez ce qui suit :

mysqlshow --user root --password music;

Assurez-vous de remplacer music avec la base de données qui vous intéresse, et root avec l'utilisateur concerné. Le --password bit entraîne que l'utilisateur est invité à entrer le mot de passe.

Résultat :

Enter password: 
Database: music
+----------------+
|     Tables     |
+----------------+
| Albums         |
| Artists        |
| Genres         |
| valbumsartists |
| valbumsgenres  |
| vallalbums     |
| vallartists    |
| vallgenres     |
+----------------+

Le mysqlshow le client renvoie des vues et des tables.

La sortie affiche uniquement les noms des bases de données, tables ou colonnes pour lesquelles l'utilisateur dispose de certains privilèges.

Si aucune base de données n'est indiquée, toutes les bases de données correspondantes sont affichées. Si aucune table n'est donnée, toutes les tables correspondantes dans la base de données sont affichées. Si aucune colonne n'est donnée, toutes les colonnes et tous les types de colonnes correspondants dans le tableau sont affichés.

Vérifiez si une table existe déjà avant de la créer

Si vous devez créer la table si elle n'existe pas, vous pouvez utiliser le IF NOT EXISTS clause de la CREATE TABLE déclaration. Si la table n'existe pas, elle sera créée. S'il existe déjà, il ne sera pas créé.

Voir Comment vérifier si une table existe déjà avant de la créer dans MySQL pour un exemple.