Chapitre 22 La base de données d'informations INFORMATION_SCHEMA

Table des matières

22.1 Les tables INFORMATION_SCHEMA
22.1.1 La table INFORMATION_SCHEMA SCHEMATA
22.1.2 La table INFORMATION_SCHEMA TABLES
22.1.3 La table INFORMATION_SCHEMA COLUMNS
22.1.4 La table INFORMATION_SCHEMA STATISTICS
22.1.5 La table INFORMATION_SCHEMA USER_PRIVILEGES
22.1.6 La table INFORMATION_SCHEMA SCHEMA_PRIVILEGES
22.1.7 La table INFORMATION_SCHEMA TABLE_PRIVILEGES
22.1.8 La table INFORMATION_SCHEMA COLUMN_PRIVILEGES
22.1.9 La table INFORMATION_SCHEMA CHARACTER_SETS
22.1.10 La table INFORMATION_SCHEMA COLLATIONS
22.1.11 La table INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY
22.1.12 La table INFORMATION_SCHEMA TABLE_CONSTRAINTS
22.1.13 La table INFORMATION_SCHEMA KEY_COLUMN_USAGE
22.1.14 La table INFORMATION_SCHEMA ROUTINES
22.1.15 La table INFORMATION_SCHEMA VIEWS
22.1.16 Autres tables INFORMATION_SCHEMA
22.2 Extensions à la commande SHOW

Le support de la base INFORMATION_SCHEMA est disponible en MySQL 5.0.2 et plus récent. Il fournit un accès aux métadonnées sur les bases de données.

Les ``métadonnées'' sont des informations sur les données, telles que le nom des bases de données, des tables, le type de données des colonnes ou les droits d'accès. On appelle aussi ces données le ``dictionnaire de données'' ou le ``catalogue système''.

Voici un exemple :

mysql> SELECT table_name, table_type, engine
    -> FROM information_schema.tables
    -> WHERE table_schema = 'db5'
    -> ORDER BY table_name DESC;
+------------+------------+--------+
| table_name | table_type | engine |
+------------+------------+--------+
| v56        | VIEW       | NULL   |
| v3         | VIEW       | NULL   |
| v2         | VIEW       | NULL   |
| v          | VIEW       | NULL   |
| tables     | BASE TABLE | MyISAM |
| t7         | BASE TABLE | MyISAM |
| t3         | BASE TABLE | MyISAM |
| t2         | BASE TABLE | MyISAM |
| t          | BASE TABLE | MyISAM |
| pk         | BASE TABLE | InnoDB |
| loop       | BASE TABLE | MyISAM |
| kurs       | BASE TABLE | MyISAM |
| k          | BASE TABLE | MyISAM |
| into       | BASE TABLE | MyISAM |
| goto       | BASE TABLE | MyISAM |
| fk2        | BASE TABLE | InnoDB |
| fk         | BASE TABLE | InnoDB |
+------------+------------+--------+
17 rows in set (0.01 sec)

Expliquation : la commande requiert la liste de toutes les tables de la base de données db5, en ordre anti-alphabétique, avec trois informations : le nom de la table, son type et le moteur de table.

INFORMATION_SCHEMA est la ``base de données d'informations'', la base qui stocke les informations à propos des autres bases que le serveur MySQL entretient. Dans INFORMATION_SCHEMA, il existe plusieurs tables en lecture seule. Ce sont en fait des vues, et non pas des tables, ce qui fait que vous ne verrez pas de fichiers associés.

Chaque utilisateur MySQL a le droit d'accéder à ces tables, mais seules les lignes concernant des objets pour lesquels il a des droits seront visibles.

Avantages de SELECT

La commande SELECT ... FROM INFORMATION_SCHEMA a pour but d'être une méthode cohérente d'accéder aux informations fournies par les différentes commandes SHOW que MySQL supporte (SHOW DATABASES, SHOW TABLES, etc). En utilisant SELECT, vous avez plusieurs avantages comparés à SHOW :

Cependant, comme SHOW est une commande populaire auprès des employés et utilisateurs de MySQL, et que cela mettrait la pagaille si cette dernière venait à disparaître, les avantages de cette convention ne sont pas suffisants pour supprimer SHOW. En fait, il y a des améliorations à la commande SHOW en MySQL 5.0. Ils sont présentés dans la section Section 22.2, « Extensions à la commande SHOW ».

Standards

L'implémentation des structures des tables de la base INFORMATION_SCHEMA suivent le standard ANSI/ISO SQL:2003 standard Part 11 ``Schemata''. Notre intention est d'atteindre une compatibilité partielle avec SQL:2003 core feature F021 ``Basic information schema''.

Les utilisateurs de SQL Server 2000 (qui suit aussi ce standard) noteront une similarité importante. Cependant, MySQL a omis certaines colonnes qui ne sont pas pertinente dans notre implémentation, et a ajouté des colonnes qui lui sont spécifique. Par exemple, la colonne de moteur de stockage pour les tables dans la table INFORMATION_SCHEMA.TABLES.

Même si les autres serveurs de base de données utilisent différents noms, comme syscat ou system, le nom standard est INFORMATION_SCHEMA.

En effet, nous avons une nouvelle ``base de données'' appelée information_schema, même s'il n'y a pas besoin de faire un fichier qui porte ce nom. Il est possible de sélectionner la base INFORMATION_SCHEMA comme base par défaut avec la commande USE, mais la seule solution pour accéder au contenu de ces tables est la commande SELECT. Vous ne pouvez pas insérer de données ou modifier le contenu des tables.

Droits

Il n'y pas de différence entre les prérequis de droits actuels pour la commande SHOW et les commandes SELECT. Dans chaque cas, vous avez les mêmes droits sur un objet, et vous en aurez besoin pour accéder aux informations le concernant.

22.1 Les tables INFORMATION_SCHEMA

Présentation des sections suivantes

Dans les prochaines sections, nous allons détailler les tables et colonnes de INFORMATION_SCHEMA. Pour chaque colonne, on présente deux informations :

  • Le ``Nom standard'' indique le nom standard SQL de la colonne.

  • Le ``Nom SHOW'' indique son équivalent dans le résultat de la commande SHOW, s'il existe.

  • ``Remarques'' fournit des informations supplémentaires, éventuellement. Nous avons marqué avec ``omis'' les colonnes dont MySQL ne fait aucun usage pour le moment. Nous avons omis ces colonnes : elles apparaissent dans les standards, mais pas dans MySQL. Leur présences est donc inutile ici.

Pour éviter d'utiliser des mots qui soient réservés par le standard, par DB2, par SQL server ou Oracle, nous avons changé le nom des colonnes qui portent la mention ``extension MySQL''. Par exemple, nous avons changé COLLATION en TABLE_COLLATION dans la table TABLES. Voyez la liste des mots à la fin de cet article : http://www.dbazine.com/gulutzan5.shtml.

La définition des colonnes, comme TABLES.TABLE_NAME), est généralement VARCHAR(N) CHARACTER SET utf8N vaut au moins 64.

Chaque section indique l'équivalent dans le résultat de la commande SHOW : c'est un équivalent à la commande SELECT qui lit les informations dans la table INFORMATION_SCHEMA, ou bien il n'y a pas d'équivalent.

Note : a l'heure actuelle, il manque des colonnes et certaines autres sont sans objet. Nous travaillons dessus, et nous mettrons à jour la documentation lorsque ces modifications seront faites.

22.1.1 La table INFORMATION_SCHEMA SCHEMATA

Un schema est une base de données. La table SCHEMATA fournit des informations sur les bases de données.

Standard NameSHOW nameRemarks
CATALOG_NAME-NULL
SCHEMA_NAME Base de données
SCHEMA_OWNER omis
DEFAULT_CHARACTER_SET_CATALOG omis
DEFAULT_CHARACTER_SET_SCHEMA omis
DEFAULT_CHARACTER_SET_NAME  
SQL_PATH NULL

Notes :

  • Pour SQL_PATH, nous auront peut-être quelque chose de fonctionne en MySQL 5.x. Pour le moment, il vaut toujours NULL.

Les commandes suivantes sont équivalentes :

SELECT SCHEMA_NAME AS `Database`
  FROM INFORMATION_SCHEMA.SCHEMATA
  [WHERE SCHEMA_NAME LIKE 'wild']

SHOW DATABASES
  [LIKE 'wild']

22.1.2 La table INFORMATION_SCHEMA TABLES

La table TABLES fournit des informations sur les bases de données.

Nom standardNom SHOWRemarques
TABLE_CATALOG NULL
TABLE_SCHEMATable_... 
TABLE_NAMETable_... 
TABLE_TYPE  
SELF_REFERENCING_COLUMN_NAME omis
REFERENCE_GENERATION omis
USER_DEFINED_TYPE_NAME omis
IS_INSERTABLE_INTO omis
IS_TYPED omis
COMMIT_ACTION omis
ENGINEEngineextension MySQL
VERSIONVersionextension MySQL
ROW_FORMATRow_formatextension MySQL
TABLE_ROWSRowsextension MySQL
AVG_ROW_LENGTHAvg_row_lengthextension MySQL
DATA_LENGTHData_lengthextension MySQL
MAX_DATA_LENGTHMax_data_lengthextension MySQL
INDEX_LENGTHIndex_lengthextension MySQL
DATA_FREEData_freeextension MySQL
AUTO_INCREMENTAuto_incrementextension MySQL
CREATE_TIMECreate_timeextension MySQL
UPDATE_TIMEUpdate_timeextension MySQL
CHECK_TIMECheck_timeextension MySQL
TABLE_COLLATIONCollationextension MySQL
CHECKSUMChecksumextension MySQL
CREATE_OPTIONSCreate_optionsextension MySQL
TABLE_COMMENTCommentextension MySQL

Notes :

  • TABLE_SCHEMA et TABLE_NAME sont un seul champ dans le résultat de SHOW, par exemple Table_in_db1.

  • TABLE_TYPE doit être BASE TABLE ou VIEW. Si la table est temporaire, alors TABLE_TYPE = TEMPORARY. Il n'y a pas de vues temporaires, alors il ne peut pas y avoir d'ambiguité.

  • Nous n'avons rien pour les jeux de caractères par défaut des tables. TABLE_COLLATION s'en approche, car les noms des collations commencent avec un nom de jeu de caractères.

Les commandes suivantes sont équivalentes :

SELECT table_name FROM INFORMATION_SCHEMA.TABLES
  [WHERE table_schema = 'db_name']
  [WHERE|AND table_name LIKE 'wild']

SHOW TABLES
  [FROM db_name]
  [LIKE 'wild']

22.1.3 La table INFORMATION_SCHEMA COLUMNS

La table COLUMNS fournit des informations sur les colonnes dans les tables.

Nom standardNom dans SHOWRemarques
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAMEField 
ORDINAL_POSITION see notes
COLUMN_DEFAULTDefault 
IS_NULLABLENull 
DATA_TYPEType 
CHARACTER_MAXIMUM_LENGTHType 
CHARACTER_OCTET_LENGTH  
NUMERIC_PRECISIONType 
NUMERIC_PRECISION_RADIX omis
NUMERIC_SCALEType 
DATETIME_PRECISION omis
INTERVAL_TYPE omis
INTERVAL_PRECISION omis
CHARACTER_SET_CATALOG omis
CHARACTER_SET_SCHEMA omis
CHARACTER_SET_NAME  
COLLATION_CATALOG omis
COLLATION_SCHEMA omis
COLLATION_NAMECollation 
DOMAIN_NAME omis
UDT_CATALOG omis
UDT_SCHEMA omis
UDT_NAME omis
SCOPE_CATALOG omis
SCOPE_SCHEMA omis
SCOPE_NAME omis
MAXIMUM_CARDINALITY omis
DTD_IDENTIFIER omis
IS_SELF_REFERENCING omis
IS_IDENTITY omis
IDENTITY_GENERATION omis
IDENTITY_START omis
IDENTITY_INCREMENT omis
IDENTITY_MAXIMUM omis
IDENTITY_MINIMUM omis
IDENTITY_CYCLE omis
IS_GENERATED omis
GENERATION_EXPRESSION omis
COLUMN_KEYKeyextension MySQL
EXTRAExtraextension MySQL
COLUMN_COMMENTCommentextension MySQL

Notes :

  • Dans SHOW, la colonne Type inclut les valeurs de différentes colonnes COLUMNS.

  • ORDINAL_POSITION est obligatoire, car il faudra peut-être un jour indiquer ORDER BY ORDINAL_POSITION. Contrairement à SHOW, SELECT n'a pas de classement par défaut.

  • CHARACTER_OCTET_LENGTH doit être le même que CHARACTER_MAXIMUM_LENGTH, sauf pour les jeux de caractères multi-octets.

  • CHARACTER_SET_NAME peut être dérivé de Collation. Par exemple, si vous indiquez SHOW FULL COLUMNS FROM t, et que vous pouvez voir dans la colonne Collation la valeur latin1_swedish_ci, alors le jeu de caractères est la partie placée avant le premier caractère souligné : latin1.

Les commandes suivantes sont presque équivalentes :

SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name LIKE 'wild']

SHOW COLUMNS
  FROM tbl_name
  [FROM db_name]
  [LIKE wild]

22.1.4 La table INFORMATION_SCHEMA STATISTICS

La table STATISTICS fournit des informations sur les tables d'index.

Nom standardNom SHOWRemarques
TABLE_CATALOG NULL
TABLE_SCHEMA = Database
TABLE_NAMETable 
NON_UNIQUENon_unique 
INDEX_SCHEMA = Database
INDEX_NAMEKey_name 
TYPE omis
SEQ_IN_INDEXSeq_in_index 
COLUMN_NAMEColumn_name 
COLLATIONCollation 
CARDINALITYCardinality 
PAGES omis
FILTER_CONDITION omis
SUB_PARTSub_partextension MySQL
PACKEDPackedextension MySQL
NULLABLENullextension MySQL
INDEX_TYPEIndex_typeextension MySQL
COMMENTCommentextension MySQL

Notes :

  • Il n'y a pas de table standard pour les index. La liste précédente est similaire au résultat que retourn SQL Server 2000 pour sp_statistics, mais nous avons remplacé le nom QUALIFIER par CATALOG et nous avons remplaclé le nom OWNER par SCHEMA.

    En fait, la table précédente est le résultat de SHOW INDEX sont dérivés du même parent. La correlation est très bonne.

Les commandes suivantes sont équivalentes :

SELECT * FROM INFORMATION_SCHEMA.STATISTICS
  WHERE table_name = 'tbl_name'
  [AND schema_name = 'db_name'

SHOW INDEX
  FROM tbl_name
  [FROM db_name]

22.1.5 La table INFORMATION_SCHEMA USER_PRIVILEGES

La table USER_PRIVILEGES fournit les informations sur les droits globaux. Cette information provient des tables mysql.user.

Non standardNom SHOWRemarques
GRANTEE i.e. 'utilisateur'@'hote'
TABLE_CATALOG NULL
PRIVILEGE_TYPE  
IS_GRANTABLE  

Notes :

  • C'est une table non standard. Elle prend ses valeurs dans les tables mysql.user.

22.1.6 La table INFORMATION_SCHEMA SCHEMA_PRIVILEGES

La table SCHEMA_PRIVILEGES fournit des informations sur les droits des schémas (l'autre nom des bases de données). Ces informations proviennent de la table mysql.db.

Nom standardNom SHOWRemarques
GRANTEE i.e.g. 'utilisateur'@'hote'
TABLE_CATALOG NULL
TABLE_SCHEMA  
PRIVILEGE_TYPE  
IS_GRANTABLE  

Notes :

  • Ceci est une table non-standard. Elle prend ses valeurs dans la table mysql.db.

22.1.7 La table INFORMATION_SCHEMA TABLE_PRIVILEGES

La table TABLE_PRIVILEGES affiche les informations sur les droits des tables. Ces informations proviennent de mysql.tables_priv.

Nom standardNom SHOWRemarques
GRANTOR omis
GRANTEE i.e. 'utilisateur'@'hote'
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  
WITH_HIERARCHY omit

Les requêtes suivantes ne sont pas équivalentes :

SELECT ... FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES

SHOW GRANTS ...

PRIVILEGE_TYPE peut contenir l'une des valeurs suivantes : SELECT, INSERT, UPDATE, REFERENCES, ALTER, INDEX, DROP et CREATE VIEW.

22.1.8 La table INFORMATION_SCHEMA COLUMN_PRIVILEGES

La table COLUMN_PRIVILEGES fournit les informations sur les droits reliés aux colonnes. Ces informations proviennent de la table de droits mysql.columns_priv.

Nom standardNom SHOWRemarques
GRANTOR omis
GRANTEE e.g. 'utilisateur'@'hote'
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAME  
PRIVILEGE_TYPE  
IS_GRANTABLE  

Notes :

  • Dans le résultat de SHOW FULL COLUMNS, les droits sont toujours affichés dans un champ, en minuscules, comme select,insert,update,references. Dans COLUMN_PRIVILEGES, il y a une ligne par droit, et la valeur est en majuscules.

  • PRIVILEGE_TYPE peut contenir une et une seule de ces valeurs : SELECT, INSERT, UPDATE, REFERENCES.

  • Si l'utilisateur a le droit de GRANT OPTION, le droit IS_GRANTABLE doit valoir YES. Sinon, IS_GRANTABLE doit valoir be NO. Le résultat ne présente pas GRANT OPTION comme une droit séparé.

Les commandes suivantes ne sont pas équivalents :

SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES

SHOW GRANTS ...

22.1.9 La table INFORMATION_SCHEMA CHARACTER_SETS

La table CHARACTER_SETS fournit des informations sur les jeux de caractères disponibles.

Nom standardNom SHOWRemarques
CHARACTER_SET_CATALOG omis
CHARACTER_SET_SCHEMA omis
CHARACTER_SET_NAMECharset 
CHARACTER_REPERTOIRE omis
FORM_OF_USE omis
NUMBER_OF_CHARACTERS omis
DEFAULT_COLLATE_CATALOG omis
DEFAULT_COLLATE_SCHEMA omis
DEFAULT_COLLATE_NAMEDefault collation 
DESCRIPTIONDescriptionExtension MySQL
MAXLENMaxlenExtension MySQL

Notes :

  • Nous avons ajouté 2 colonnes non standard qui sont Description et Maxlen, dans la commande SHOW CHARACTER SET.

Les commandes suivantes sont équivalentes :

SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
  [WHERE name LIKE 'wild']

SHOW CHARACTER SET
  [LIKE 'wild']

22.1.10 La table INFORMATION_SCHEMA COLLATIONS

La table COLLATIONS fournit des informations sur les collations de chaque jeu de caractères.

Nom standardNom SHOWRemarques
COLLATION_CATALOG omis;
COLLATION_SCHEMA omis;
COLLATION_NAMECollation 
PAD_ATTRIBUTE omis;
COLLATION_TYPE omis;
COLLATION_DEFINITION omis;
COLLATION_DICTIONARY omis;
CHARACTER_SET_NAME omis; extension de MySQL
ID omis; extension de MySQL
IS_DEFAULT omis; extension de MySQL
IS_COMPILED omis; extension de MySQL
SORTLEN omis; extension de MySQL

Notes :

  • Nous avons ajouté 5 colonnes non standard qui correspondent au Charset, Id, Default, Compiled et Sortlen dans le résultat de SHOW COLLATION.

Les commandes suivantes sont équivalentes :

SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
  [WHERE collation_name LIKE 'wild']

SHOW COLLATION
  [LIKE 'wild']

22.1.11 La table INFORMATION_SCHEMA COLLATION_CHARACTER_SET_APPLICABILITY

La table COLLATION_CHARACTER_SET_APPLICABILITY indique les jeux de caractères et les collations associées. Les colonnes sont équivalentes aux deux premières colonnes du résultat de la commande SHOW COLLATION.

Nom standardNom SHOWRemarques
COLLATION_CATALOG omis
COLLATION_SCHEMA omis
COLLATION_NAMECollation 
CHARACTER_SET_CATALOG omis
CHARACTER_SET_SCHEMA omis
CHARACTER_SET_NAMECharset 

22.1.12 La table INFORMATION_SCHEMA TABLE_CONSTRAINTS

La table TABLE_CONSTRAINTS décrit les tables qui ont des contraintes.

Nom standardNom SHOWRemarques
CONSTRAINT_CATALOG NULL
CONSTRAINT_SCHEMA  
CONSTRAINT_NAME  
TABLE_CATALOG omit
TABLE_SCHEMA  
TABLE_NAME  
CONSTRAINT_TYPE  
IS_DEFERRABLE omit
INITIALLY_DEFERRED omit

Notes :

  • La valeur CONSTRAINT_TYPE peut être UNIQUE, PRIMARY KEY ou FOREIGN KEY.

  • Les informations de UNIQUE et PRIMARY KEY sont les mêmes que celles que vous obtenez dans le champ Key_name du résultat de SHOW INDEX où le champ Non_unique vaut 0.

  • La colonne CONSTRAINT_TYPE peut contenir l'une de ces valeurs : UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK. C'est une colonne de type CHAR et non pas ENUM. La valeur de CHECK n'est pas valable jusqu'à ce que nous supportions CHECK.

22.1.13 La table INFORMATION_SCHEMA KEY_COLUMN_USAGE

La table KEY_COLUMN_USAGE décrit les contraintes sur les colonnes.

Nom standardNom SHOWRemarques
CONSTRAINT_CATALOG NULL
CONSTRAINT_SCHEMA  
CONSTRAINT_NAME  
TABLE_CATALOG  
TABLE_SCHEMA  
TABLE_NAME  
COLUMN_NAME  
ORDINAL_POSITION  
POSITION_IN_UNIQUE_CONSTRAINT  

Notes :

  • Si la contrainte est une clé étrangère, alors c'est la colonne de la clé étrangère, et non pas la colonne que la clé étrangère référence.

  • La valeur de ORDINAL_POSITION est la position de la colonne dans la contrainte, et non pas la position de la colonne dans la table. Les positions des colonnes commencent à 1.

  • La valeur de POSITION_IN_UNIQUE_CONSTRAINT est NULL pour les contraintes unique et clé primaire. Pour les contraintes de clé étrangère, c'est la position ordinale dans la clé de la table qui est référencée.

    Par exemple, supposez que vous ayez les deux tables t1 et t3, avec les définitions suivantes :

    CREATE TABLE t1
    (
        s1 INT,
        s2 INT,
        s3 INT,
        PRIMARY KEY(s3)
    ) ENGINE=InnoDB;
    
    CREATE TABLE t3
    (
        s1 INT,
        s2 INT,
        s3 INT,
        KEY(s1),
        CONSTRAINT CO FOREIGN KEY (s2) REFERENCES t1(s3)
    ) ENGINE=InnoDB;
    

    Pour ces deux tables, la table KEY_COLUMN_USAGE a deux lignes :

    • Une ligne avec CONSTRAINT_NAME='PRIMARY', TABLE_NAME='t1', COLUMN_NAME='s3', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=NULL.

    • Une ligne avec CONSTRAINT_NAME='CO', TABLE_NAME='t3', COLUMN_NAME='s2', ORDINAL_POSITION=1, POSITION_IN_UNIQUE_CONSTRAINT=1.

22.1.14 La table INFORMATION_SCHEMA ROUTINES

La table ROUTINES fournit des informations sur les procédures stockées (sur les procédures et les fonctions). La table ROUTINES n'inclut pas les fonctions utilisateurs (dites UDF) actuellement.

La colonne appelée ``mysql.proc name'' indique la colonne de la table mysql.proc qui correspond à la colonne de la table INFORMATION_SCHEMA.ROUTINES, si elle existe.

Nom standardNom mysql.procRemarques
SPECIFIC_CATALOG omis
SPECIFIC_SCHEMAdbomis
SPECIFIC_NAMEspecific_name 
ROUTINE_CATALOG NULL
ROUTINE_SCHEMAdb 
ROUTINE_NAMEname 
MODULE_CATALOG omis
MODULE_SCHEMA omis
MODULE_NAME omis
USER_DEFINED_TYPE_CATALOG omis
USER_DEFINED_TYPE_SCHEMA omis
USER_DEFINED_TYPE_NAME omis
ROUTINE_TYPEtype{PROCEDURE|FUNCTION}
DTD_IDENTIFIER (data type descriptor)
ROUTINE_BODY SQL
ROUTINE_DEFINITIONbody 
EXTERNAL_NAME NULL
EXTERNAL_LANGUAGElanguageNULL
PARAMETER_STYLE SQL
IS_DETERMINISTICis_deterministic 
SQL_DATA_ACCESSsql_data_access 
IS_NULL_CALL omis
SQL_PATH NULL
SCHEMA_LEVEL_ROUTINE omis
MAX_DYNAMIC_RESULT_SETS omis
IS_USER_DEFINED_CAST omis
IS_IMPLICITLY_INVOCABLE omis
SECURITY_TYPEsecurity_type 
TO_SQL_SPECIFIC_CATALOG omis
TO_SQL_SPECIFIC_SCHEMA omis
TO_SQL_SPECIFIC_NAME omis
AS_LOCATOR omis
CREATEDcreated 
LAST_ALTEREDmodified 
NEW_SAVEPOINT_LEVEL omis
IS_UDT_DEPENDENT omis
RESULT_CAST_FROM_DTD_IDENTIFIER omis
RESULT_CAST_AS_LOCATOR omis
SQL_MODEsql_modeextension MySQL
ROUTINE_COMMENTcommentextension MySQL
DEFINERdefinerextension MySQL

Notes :

  • MySQL calcule EXTERNAL_LANGUAGE comme suit :

    • Si mysql.proc.language='SQL', alors EXTERNAL_LANGUAGE vaut NULL

    • Sinon, EXTERNAL_LANGUAGE prend la valeur de mysql.proc.language. Cependant, nous n'avons pas de langage externe pour le momemnt, ce qui fait que cette valeur est toujours NULL.

22.1.15 La table INFORMATION_SCHEMA VIEWS

La table VIEWS fournit des informations sur les vues dans les bases.

Nom standardSHOWRemarques
TABLE_CATALOG NULL
TABLE_SCHEMA  
TABLE_NAME  
VIEW_DEFINITION  
CHECK_OPTION  
IS_UPDATABLE  
INSERTABLE_INTO omit

Notes :

  • Il existe un nouveau droit, SHOW VIEW, sans lequel vous ne pourrez pas voir la table VIEWS.

  • La colonne VIEW_DEFINITION contient l'essentiel de ce que vous voyez dans le champ Create Table que la commande SHOW CREATE VIEW produit. Omettez les mots avant SELECT et omettez les mots après WITH CHECK OPTION. Par exemple, si la commande initiale était :

    CREATE VIEW v AS
      SELECT s2,s1 FROM t
      WHERE s1 > 5
      ORDER BY s1
      WITH CHECK OPTION;
    

    alors la définition de la vue est :

    SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
    
  • La colonne CHECK_OPTION contient toujours la valeur NONE.

  • La colonne IS_UPDATABLE vaut YES si la vue est modifiable, et NO dans le cas contraire.

22.1.16 Autres tables INFORMATION_SCHEMA

Nous allons ajouter d'autres tables dans la base INFORMATION_SCHEMA prochainement. Notamment, nous avons identifié le besoin de tables telles que INFORMATION_SCHEMA.PARAMETERS, INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS et INFORMATION_SCHEMA.TRIGGERS.

22.2 Extensions à la commande SHOW

Plusieurs extensions de la SHOW accompagnent l'implémentation de la base INFORMATION_SCHEMA :

  • SHOW peut être utilisé pour lire des informations sur la structure de la base INFORMATION_SCHEMA elle-même.

  • Plusieurs commandes SHOW acceptent une clause WHERE qui fournit plus de souplesse pour spécifier les lignes à afficher.

Ces extensions sont disponibles depuis MySQL 5.0.3.

INFORMATION_SCHEMA est une base de données d'informations, ce qui fait que son nom est inclus dans le résultat de SHOW DATABASES. Similairement, SHOW TABLES peut servir avec INFORMATION_SCHEMA pour lire la liste des tables disponibles :

mysql> SHOW TABLES FROM INFORMATION_SCHEMA;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| SCHEMATA                              |
| TABLES                                |
| COLUMNS                               |
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| ROUTINES                              |
| STATISTICS                            |
| VIEWS                                 |
| USER_PRIVILEGES                       |
| SCHEMA_PRIVILEGES                     |
| TABLE_PRIVILEGES                      |
| COLUMN_PRIVILEGES                     |
| TABLE_CONSTRAINTS                     |
| KEY_COLUMN_USAGE                      |
+---------------------------------------+

SHOW COLUMNS and DESCRIBE can display information about the columns in individual INFORMATION_SCHEMA tables.

Plusieurs commandes SHOW ont été étendues avec la clause WHERE :

SHOW CHARACTER SET
SHOW COLLATION
SHOW COLUMNS
SHOW DATABASES
SHOW FUNCTION STATUS
SHOW KEYS
SHOW OPEN TABLES
SHOW PROCEDURE STATUS
SHOW STATUS
SHOW TABLE STATUS
SHOW TABLES
SHOW VARIABLES

La clause WHERE, lorsqu'elle est disponible, utilise le nom des colonnes de l'affichage de la commande SHOW. Par exemple, la commande SHOW COLLATION produit ces colonnes :

mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | ISO 8859-1 West European    | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |

...

Pour utiliser la clause WHERE avec la commande SHOW CHARACTER SET, il faut utiliser les noms de ces colonnes. Par exemple, la commande suivante affiche les informations sur les jeux de caractères dont ls collation par défaut contient la chaîne "japanese" :

mysql> SHOW CHARACTER SET WHERE `Default collation` LIKE '%japanese%';
+---------+---------------------------+---------------------+--------+
| Charset | Description               | Default collation   | Maxlen |
+---------+---------------------------+---------------------+--------+
| ujis    | EUC-JP Japanese           | ujis_japanese_ci    |      3 |
| sjis    | Shift-JIS Japanese        | sjis_japanese_ci    |      2 |
| cp932   | SJIS for Windows Japanese | cp932_japanese_ci   |      2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci |      3 |
+---------+---------------------------+---------------------+--------+

Cette commande affiche la liste des jeux de caractères multi-octets :

mysql> SHOW CHARACTER SET WHERE Maxlen > 1;
+---------+---------------------------+---------------------+--------+
| Charset | Description               | Default collation   | Maxlen |
+---------+---------------------------+---------------------+--------+
| big5    | Big5 Traditional Chinese  | big5_chinese_ci     |      2 |
| ujis    | EUC-JP Japanese           | ujis_japanese_ci    |      3 |
| sjis    | Shift-JIS Japanese        | sjis_japanese_ci    |      2 |
| euckr   | EUC-KR Korean             | euckr_korean_ci     |      2 |
| gb2312  | GB2312 Simplified Chinese | gb2312_chinese_ci   |      2 |
| gbk     | GBK Simplified Chinese    | gbk_chinese_ci      |      2 |
| utf8    | UTF-8 Unicode             | utf8_general_ci     |      3 |
| ucs2    | UCS-2 Unicode             | ucs2_general_ci     |      2 |
| cp932   | SJIS for Windows Japanese | cp932_japanese_ci   |      2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci |      3 |
+---------+---------------------------+---------------------+--------+