22. La base de données d'informations INFORMATION_SCHEMA▲
Le support de la base INFORMATION_SCHEMA est disponible dans MySQL 5.0.2 et les versions les plus récentes. 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)Explication : 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 faits sur des tables ;
- personne n'a besoin d'apprendre une nouvelle syntaxe. Comme tout le monde connaît déjà les commandes
SELECT, il suffit d'apprendre les noms des objets ; - l'implémenteur n'a pas besoin d'ajouter de nouveaux mots-clés ;
- 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 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. Elles sont présentées dans la section Section 22.2 : « Extensions à la commande SHOW »22.2. Extensions à la commande SHOW.
Standards
L'implémentation des structures des tables de la base INFORMATION_SCHEMA suit 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 pertinentes dans notre implémentation, et a ajouté des colonnes qui lui sont spécifiques. Par exemple, la colonne du 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 des données ou modifier le contenu des tables.
Droits
Il n'y a 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-A. 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 commandeSHOW, 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ésence 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 : à l'heure actuelle, il manque des colonnes et certaines autres sont sans objets. Nous travaillons dessus et nous mettrons à jour la documentation lorsque ces modifications seront faites.
22-A-1. La table INFORMATION_SCHEMA SCHEMATA▲
Un schéma 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 |
- |
|
|
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 |
|
Notes :
- pour SQL_PATH, nous aurons peut-être quelque chose de fonctionnelle 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-A-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 |
|
|
|
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'ambiguïté ;
- 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-A-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 |
|
|
|
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 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-A-4. La table INFORMATION_SCHEMA STATISTICS▲
La table STATISTICS fournit des informations sur les tables d'index.
|
Nom standard |
Nom SHOW |
Remarques |
|---|---|---|
|
TABLE_CATALOG |
|
|
|
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 retourne SQL Server 2000 pour sp_statistics, mais nous avons remplacé le nom QUALIFIER par CATALOG et nous avons remplacé le nom OWNER par SCHEMA.
En fait, la table précédente et le résultat de SHOW INDEX sont dérivés du même parent. La corrélation 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-A-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 |
|
|
|
PRIVILEGE_TYPE |
||
|
IS_GRANTABLE |
Notes :
- c'est une table non standard. Elle prend ses valeurs dans les tables mysql.user.
22-A-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 |
|
|
|
TABLE_SCHEMA |
||
|
PRIVILEGE_TYPE |
||
|
IS_GRANTABLE |
Notes :
- ceci est une table non standard. Elle prend ses valeurs dans la table mysql.db.
22-A-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 |
|
|
|
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-A-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 |
|
|
|
TABLE_SCHEMA |
||
|
TABLE_NAME |
||
|
COLUMN_NAME |
||
|
PRIVILEGE_TYPE |
||
|
IS_GRANTABLE |
Notes :
- dans le résultat de
SHOWFULLCOLUMNS, 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
GRANTOPTION, le droit IS_GRANTABLE doit valoir YES. Sinon, IS_GRANTABLE doit valoirNO. Le résultat ne présente pasGRANTOPTIONcomme un droit séparé.
Les commandes suivantes ne sont pas équivalentes :
SELECT ... FROM INFORMATION_SCHEMA.COLUMN_PRIVILEGES
SHOW GRANTS ...22-A-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é deux colonnes non standards que sont Description et Maxlen, dans la commande
SHOWCHARACTERSET.
Les commandes suivantes sont équivalentes :
SELECT * FROM INFORMATION_SCHEMA.CHARACTER_SETS
[WHERE name LIKE 'wild']
SHOW CHARACTER SET
[LIKE 'wild']22-A-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é cinq colonnes non standards qui correspondent au Charset, Id, Default, Compiled et Sortlen dans le résultat de
SHOWCOLLATION.
Les commandes suivantes sont équivalentes :
SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS
[WHERE collation_name LIKE 'wild']
SHOW COLLATION
[LIKE 'wild']22-A-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-A-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 |
|
|
|
CONSTRAINT_SCHEMA |
||
|
CONSTRAINT_NAME |
||
|
TABLE_CATALOG |
omis |
|
|
TABLE_SCHEMA |
||
|
TABLE_NAME |
||
|
CONSTRAINT_TYPE |
||
|
IS_DEFERRABLE |
omis |
|
|
INITIALLY_DEFERRED |
omis |
Notes :
- la valeur CONSTRAINT_TYPE peut être
UNIQUE,PRIMARYKEYouFOREIGNKEY; - les informations de
UNIQUEetPRIMARYKEYsont les mêmes que celles que vous obtenez dans le champ Key_name du résultat deSHOWINDEXoù le champ Non_unique vaut0; - la colonne CONSTRAINT_TYPE peut contenir l'une de ces valeurs :
UNIQUE,PRIMARYKEY,FOREIGNKEY,CHECK. C'est une colonne de typeCHARet non pasENUM. La valeur deCHECKn'est pas valable jusqu'à ce que nous supportionsCHECK.
22-A-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 |
|
|
|
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
NULLpour les contraintes uniques et les clés primaires. 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-A-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 |
|
|
|
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 |
|
|
|
EXTERNAL_LANGUAGE |
language |
|
|
PARAMETER_STYLE |
SQL |
|
|
IS_DETERMINISTIC |
is_deterministic |
|
|
SQL_DATA_ACCESS |
sql_data_access |
|
|
IS_NULL_CALL |
omis |
|
|
SQL_PATH |
|
|
|
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 vautNULL; - sinon, EXTERNAL_LANGUAGE prend la valeur de mysql.proc.language. Cependant, nous n'avons pas de langage externe pour le moment, ce qui fait que cette valeur est toujours
NULL.
- si mysql.proc.
22-A-15. La table INFORMATION_SCHEMA VIEWS▲
La table VIEWS fournit des informations sur les vues dans les bases.
|
Nom standard |
SHOW |
Remarques |
|---|---|---|
|
TABLE_CATALOG |
|
|
|
TABLE_SCHEMA |
||
|
TABLE_NAME |
||
|
VIEW_DEFINITION |
||
|
CHECK_OPTION |
||
|
IS_UPDATABLE |
||
|
INSERTABLE_INTO |
omis |
Notes :
- il existe un nouveau droit,
SHOWVIEW, 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
SHOWCREATEVIEWproduit. Omettez les mots avantSELECTet omettez les mots aprèsWITHCHECKOPTION. Par exemple, si la commande initiale était :SélectionnezCREATEVIEWvASSELECTs2,s1FROMtWHEREs1>5ORDERBYs1WITHCHECKOPTION;alors la définition de la vue serait:
SélectionnezSELECTs2,s1FROMtWHEREs1>5ORDERBYs1 -
la colonne CHECK_OPTION contient toujours la valeur
NONE; - la colonne IS_UPDATABLE vaut YES si la vue est modifiable, et
NOdans le cas contraire.
22-A-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-B. Extensions à la commande SHOW▲
Plusieurs extensions de la commande SHOW accompagnent l'implémentation de la base INFORMATION_SCHEMA :
SHOWpeut être utilisé pour lire des informations sur la structure de la base INFORMATION_SCHEMA elle-même ;- plusieurs commandes
SHOWacceptent une clauseWHEREqui 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 et DESCRIBE peuvent afficher des informations à propos des colonnes des tables INFORMATION_SCHEMA.
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 VARIABLESLa 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 la 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 |
+---------+---------------------------+---------------------+--------+

