Chapitre 22. La base de données d'informations `INFORMATION_SCHEMA`
Précédent |  | Suivant

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

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` :

- Il est conforme aux règles de Codd. C'est à dire que tous les accès sont fait sur des tables.

- Personne n'a besoin d'apprendre une nouvelle syntaxe. Comme tout le monde connait déjà les commandes `SELECT`, il suffit d'apprendre les noms des objets.

- L'implémenteeur n'a pas besoin d'ajouter de nouveaux mots-clé.

- Il y a des millions de formats de résultats possibles, au lieu d'un seul. Cela apporte de la flexibilité aux applications qui ont des spécifications variables sur les métadonnées qu'elles recherchent.

- La migration est plus facile, car toutes les autres bases de données fonctionnent sur ce schéma.

Cependant, comme `SHOW` est une comande 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 sectinos, 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 utf8` où `N` 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 Name | `SHOW` name | Remarks
`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 standard | Nom `SHOW` | Remarques
`TABLE_CATALOG` |  | `NULL`
`TABLE_SCHEMA` | `Table_`... |
`TABLE_NAME` | `Table_`... |
`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
`ENGINE` | `Engine` | extension MySQL
`VERSION` | `Version` | extension MySQL
`ROW_FORMAT` | `Row_format` | extension MySQL
`TABLE_ROWS` | `Rows` | extension MySQL
`AVG_ROW_LENGTH` | `Avg_row_length` | extension MySQL
`DATA_LENGTH` | `Data_length` | extension MySQL
`MAX_DATA_LENGTH` | `Max_data_length` | extension MySQL
`INDEX_LENGTH` | `Index_length` | extension MySQL
`DATA_FREE` | `Data_free` | extension MySQL
`AUTO_INCREMENT` | `Auto_increment` | extension MySQL
`CREATE_TIME` | `Create_time` | extension MySQL
`UPDATE_TIME` | `Update_time` | extension MySQL
`CHECK_TIME` | `Check_time` | extension MySQL
`TABLE_COLLATION` | `Collation` | extension MySQL
`CHECKSUM` | `Checksum` | extension MySQL
`CREATE_OPTIONS` | `Create_options` | extension MySQL
`TABLE_COMMENT` | `Comment` | extension 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 standard | Nom dans `SHOW` | Remarques
`TABLE_CATALOG` |  | `NULL`
`TABLE_SCHEMA` |  |
`TABLE_NAME` |  |
`COLUMN_NAME` | `Field` |
`ORDINAL_POSITION` |  | see notes
`COLUMN_DEFAULT` | `Default` |
`IS_NULLABLE` | `Null` |
`DATA_TYPE` | `Type` |
`CHARACTER_MAXIMUM_LENGTH` | `Type` |
`CHARACTER_OCTET_LENGTH` |  |
`NUMERIC_PRECISION` | `Type` |
`NUMERIC_PRECISION_RADIX` |  | omis
`NUMERIC_SCALE` | `Type` |
`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_NAME` | `Collation` |
`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_KEY` | `Key` | extension MySQL
`EXTRA` | `Extra` | extension MySQL
`COLUMN_COMMENT` | `Comment` | extension 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 suiavntes 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 standard | Nom `SHOW` | Remarques
`TABLE_CATALOG` |  | `NULL`
`TABLE_SCHEMA` |  | = Database
`TABLE_NAME` | `Table` |
`NON_UNIQUE` | `Non_unique` |
`INDEX_SCHEMA` |  | = Database
`INDEX_NAME` | `Key_name` |
`TYPE` |  | omis
`SEQ_IN_INDEX` | `Seq_in_index` |
`COLUMN_NAME` | `Column_name` |
`COLLATION` | `Collation` |
`CARDINALITY` | `Cardinality` |
`PAGES` |  | omis
`FILTER_CONDITION` |  | omis
`SUB_PART` | `Sub_part` | extension MySQL
`PACKED` | `Packed` | extension MySQL
`NULLABLE` | `Null` | extension MySQL
`INDEX_TYPE` | `Index_type` | extension MySQL
`COMMENT` | `Comment` | extension 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 standard | Nom `SHOW` | Remarques
`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 standard | Nom `SHOW` | Remarques
`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 standard | Nom `SHOW` | Remarques
`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 standard | Nom `SHOW` | Remarques
`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 standard | Nom `SHOW` | Remarques
`CHARACTER_SET_CATALOG` |  | omis
`CHARACTER_SET_SCHEMA` |  | omis
`CHARACTER_SET_NAME` | `Charset` |
`CHARACTER_REPERTOIRE` |  | omis
`FORM_OF_USE` |  | omis
`NUMBER_OF_CHARACTERS` |  | omis
`DEFAULT_COLLATE_CATALOG` |  | omis
`DEFAULT_COLLATE_SCHEMA` |  | omis
`DEFAULT_COLLATE_NAME` | `Default collation` |
`DESCRIPION` | `Description` | Extension MySQL
`MAXLEN` | `Maxlen` | Extension 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 standard | Nom `SHOW` | Remarques
`COLLATION_CATALOG` |  | omis;
`COLLATION_SCHEMA` |  | omis;
`COLLATION_NAME` | `Collation` |
`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 standard | Nom `SHOW` | Remarques
`COLLATION_CATALOG` |  | omis
`COLLATION_SCHEMA` |  | omis
`COLLATION_NAME` | `Collation` |
`CHARACTER_SET_CATALOG` |  | omis
`CHARACTER_SET_SCHEMA` |  | omis
`CHARACTER_SET_NAME` | `Charset` |

### 22.1.12. La table `INFORMATION_SCHEMA TABLE_CONSTRAINTS`

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

Nom standard | Nom `SHOW` | Remarques
`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 standard | Nom `SHOW` | Remarques
`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 standard | Nom `mysql.proc` | Remarques
`SPECIFIC_CATALOG` |  | omis
`SPECIFIC_SCHEMA` | `db` | omis
`SPECIFIC_NAME` | `specific_name` |
`ROUTINE_CATALOG` |  | `NULL`
`ROUTINE_SCHEMA` | `db` |
`ROUTINE_NAME` | `name` |
`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_TYPE` | `type` | `{PROCEDURE|FUNCTION}`
`DTD_IDENTIFIER` |  | (data type descriptor)
`ROUTINE_BODY` |  | `SQL`
`ROUTINE_DEFINITION` | `body` |
`EXTERNAL_NAME` |  | `NULL`
`EXTERNAL_LANGUAGE` | `language` | `NULL`
`PARAMETER_STYLE` |  | `SQL`
`IS_DETERMINISTIC` | `is_deterministic` |
`SQL_DATA_ACCESS` | `sql_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_TYPE` | `security_type` |
`TO_SQL_SPECIFIC_CATALOG` |  | omis
`TO_SQL_SPECIFIC_SCHEMA` |  | omis
`TO_SQL_SPECIFIC_NAME` |  | omis
`AS_LOCATOR` |  | omis
`CREATED` | `created` |
`LAST_ALTERED` | `modified` |
`NEW_SAVEPOINT_LEVEL` |  | omis
`IS_UDT_DEPENDENT` |  | omis
`RESULT_CAST_FROM_DTD_IDENTIFIER` |  | omis
`RESULT_CAST_AS_LOCATOR` |  | omis
`SQL_MODE` | `sql_mode` | extension MySQL
`ROUTINE_COMMENT` | `comment` | extension MySQL
`DEFINER` | `definer` | extension 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 standard | `SHOW` | Remarques
`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 dispnoibles :

    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 |
    +---------+---------------------------+---------------------+--------+

This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

Précédent |  | Suivant
Chapitre 21. Vues | Sommaire | Chapitre 23. Mathématiques de précision