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
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 valoirNO
. Le résultat ne présente pasGRANT
OPTION
comme 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
SHOW
CHARACTER
SET
.
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
SHOW
COLLATION
.
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
,PRIMARY
KEY
ouFOREIGN
KEY
; - les informations de
UNIQUE
etPRIMARY
KEY
sont les mêmes que celles que vous obtenez dans le champ Key_name du résultat deSHOW
INDEX
où le champ Non_unique vaut0
; - la colonne CONSTRAINT_TYPE peut contenir l'une de ces valeurs :
UNIQUE
,PRIMARY
KEY
,FOREIGN
KEY
,CHECK
. C'est une colonne de typeCHAR
et non pasENUM
. La valeur deCHECK
n'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
NULL
pour 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,
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 avantSELECT
et omettez les mots aprèsWITH
CHECK
OPTION
. Par exemple, si la commande initiale était :SélectionnezCREATE
VIEW
vAS
SELECT
s2,s1FROM
tWHERE
s1>
5
ORDER
BY
s1WITH
CHECK
OPTION
;alors la définition de la vue serait:
SélectionnezSELECT
s2,s1FROM
tWHERE
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-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 :
SHOW
peut être utilisé pour lire des informations sur la structure de la base INFORMATION_SCHEMA elle-même ;- plusieurs commandes
SHOW
acceptent une clauseWHERE
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
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
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 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
|
+
---------+---------------------------+---------------------+--------+