Connaître les caractéristiques d’une BDD en SQL

En SQL, il est possible de récupérer toutes les infos d’une BDD, et de les afficher en un seul endroit.
Les informations primordiales d’une BDD sont les suivantes :

  • Nom des tables
  • Noms des champs
  • Type des champs
  • Infos unique (ou non)
  • Les types de clés
  • champs indexés (ou non)

Pour avoir ces infos, il faut utiliser la commande INFORMATION_SCHEMA, qui fournit un accès aux métadonnées sur les bases de données.
Pour tout savoir la-dessus, je peux vous conseiller la documentation MySQL sur ce sujet.

Voici, ci-dessous, une requête SQL qui permet de récupérer ces infos d’une base de données WordPress.

SELECT tab1 as `Table`, fie1 as 'Field', typ1 as 'Type', CASE WHEN U.COLUMN_KEY = 'PRI' THEN 'OUI' ELSE '' END AS 'PK ?', CASE WHEN U.COLUMN_KEY = 'UNI' THEN 'OUI' ELSE '' END AS 'UNIQUE ?', CASE WHEN U.COLUMN_KEY = 'MUL' THEN 'OUI' ELSE '' END AS 'Index ?', CASE WHEN U.ref_col_name IS NOT NULL THEN 'OUI' ELSE '' END AS 'FK Defined ?'  FROM
(SELECT INFORMATION_SCHEMA.COLUMNS.TABLE_NAME as tab1,
    INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME as fie1, INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA as schema1,
    DATA_TYPE as typ1,
    COLUMN_KEY,
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE.REFERENCED_COLUMN_NAME as ref_col_name
 FROM INFORMATION_SCHEMA.COLUMNS
    LEFT JOIN
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE
        ON  CONCAT(INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME) = CONCAT(INFORMATION_SCHEMA.COLUMNS.TABLE_NAME,INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME)
UNION
SELECT  INFORMATION_SCHEMA.COLUMNS.TABLE_NAME as tab1,
    INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME as fie1, '' as schema1,
    DATA_TYPE as typ1,
    COLUMN_KEY,
    '' as ref_col_name
FROM    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    RIGHT JOIN
        INFORMATION_SCHEMA.COLUMNS
        ON  CONCAT(INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME, INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME) = CONCAT(INFORMATION_SCHEMA.COLUMNS.TABLE_NAME,INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME)
) AS U WHERE schema1 = "wordpress" ORDER BY tab1, fie1;

Voici les premiers résultats de cette requête :

Je trouve les résultats très intéressants.

Pour faire cette même recherche sur une autre base de donnée, il suffit de faire la modification dans le WHERE.
C’est sur la dernière ligne de la requête SQL.