Table des matières
INFORMATION_SCHEMA
INFORMATION_SCHEMA SCHEMATA
INFORMATION_SCHEMA TABLES
INFORMATION_SCHEMA COLUMNS
INFORMATION_SCHEMA STATISTICS
INFORMATION_SCHEMA USER_PRIVILEGES
INFORMATION_SCHEMA SCHEMA_PRIVILEGES
INFORMATION_SCHEMA TABLE_PRIVILEGES
INFORMATION_SCHEMA COLUMN_PRIVILEGES
INFORMATION_SCHEMA CHARACTER_SETS
INFORMATION_SCHEMA COLLATIONS
INFORMATION_SCHEMA
COLLATION_CHARACTER_SET_APPLICABILITY
INFORMATION_SCHEMA TABLE_CONSTRAINTS
INFORMATION_SCHEMA KEY_COLUMN_USAGE
INFORMATION_SCHEMA ROUTINES
INFORMATION_SCHEMA VIEWS
INFORMATION_SCHEMA
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
:
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 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.
INFORMATION_SCHEMA SCHEMATA
INFORMATION_SCHEMA TABLES
INFORMATION_SCHEMA COLUMNS
INFORMATION_SCHEMA STATISTICS
INFORMATION_SCHEMA USER_PRIVILEGES
INFORMATION_SCHEMA SCHEMA_PRIVILEGES
INFORMATION_SCHEMA TABLE_PRIVILEGES
INFORMATION_SCHEMA COLUMN_PRIVILEGES
INFORMATION_SCHEMA CHARACTER_SETS
INFORMATION_SCHEMA COLLATIONS
INFORMATION_SCHEMA
COLLATION_CHARACTER_SET_APPLICABILITY
INFORMATION_SCHEMA TABLE_CONSTRAINTS
INFORMATION_SCHEMA KEY_COLUMN_USAGE
INFORMATION_SCHEMA ROUTINES
INFORMATION_SCHEMA VIEWS
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(
où 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.
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']
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']
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 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]
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]
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
.
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
.
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
.
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 ...
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 | |
DESCRIPTION | 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']
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']
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 |
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
.
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.
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
.
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.
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 |
+---------+---------------------------+---------------------+--------+