MySQL/Parcourir les bases de données
mysql.
codice_1 est une base de données système contenant des variables propres au serveur, telles que les comptes utilisateurs (dans la table "user"), le fuseau horaire (dans la table "time_zone") ou les logs.
Il est possible d'y stocker l'historique des requêtes entrées sur le serveur en activant :
 SET GLOBAL log_output = 'TABLE';
 SET GLOBAL general_log = 'ON';
Elles apparaissent ainsi dans la table "general_log", ce qui peut être pratique pour déboguer une application en boite noire. Par contre il faut vite les désactiver après la mesure car elles peuvent devenir très volumineuses.
 SET GLOBAL general_log = 'OFF';
 SELECT * FROM mysql.general_log;
INFORMATION_SCHEMA.
codice_2 est une base de données virtuelle apparue dans MySQL 5, qui contient des métadonnées sur le serveur et ses bases. Elle se remplit automatiquement et n'est pas modifiable (ni la structure, ni les données), on peut donc juste la lire.
Beaucoup de ses informations sont récupérables aussi avec la commande codice_3, plus rapide. Toutefois codice_2 est plus flexible.
La table de "INFORMATION_SCHEMA" sur les bases est "SCHEMATA". Le programme codice_5 (en ligne de commande DOS/Unix) peut aussi être utilisé à la place.
Cela ne peut fonctionner que si le serveur est démarré, et sans l'option codice_6.
En l'absence des privilèges codice_7, seule les bases sur lesquelles le compte a des permissions seront visibles.
Exemples d'utilisation.
Rechercher un nom de colonne dans toutes les tables d'une base.
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%ma_recherche%';
Lister les tables les plus volumineuses.
Pour trier les tables par taille :
SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH
FROM information_schema.TABLES
WHERE table_schema = "ma_base"
ORDER BY DATA_LENGTH DESC;
Pour avoir la taille d'une table, ajouter :
 AND table_name = "ma_table";
Lister les bases.
Les commandes SQL suivantes fournissent les informations relatives aux bases de données situées sur le serveur courant.
Toutes :
 SHOW DATABASES;
le mot clé codice_8 peut être utilisé en lieu et place de codice_9. MySQL ne supporte pas les codice_8 des standards SQL, donc il est synonyme de codice_9. il a été ajouté pour la compatibilité avec d'autres SGBD.
Ajouter un filtre sur les noms des bases.
 SHOW DATABASES LIKE 'expression';
L'opérateur codice_12 fonctionne selon le standard. Donc il est faisable de lister toutes les bases commençant par 'wiki' ainsi :
 SHOW DATABASES LIKE 'wiki%';
Filtres complexes.
En utilisant la clause codice_13 :
 SHOW DATABASES WHERE conditions;
Elle autorise les , les opérateur de comparaison '=', '<' et '>', et les fonctions sur les chaînes de caractères.
Lister les tables et les vues.
Les tables `TABLES` et `VIEWS` de la base "INFORMATION_SCHEMA" fournissent des informations sur les tables et les vues de toutes les bases du serveur. 
Les commandes SQL suivantes donnant relativement peu d'information sur les vues, il faudra recourir à la table `VIEWS` pour les métadonnées.
codice_5 peut aussi être utilisé à la place.
Show all tables.
 USE `database`;
 SHOW TABLES;
 SHOW TABLES FROM `database`;
Les deux formes sont équivalentes.
Appliquer un filtre.
La syntaxe est la même que pour les bases :
 SHOW TABLES LIKE `expression`;
 SHOW TABLES WHERE condition;
De plus, par défaut codice_15 ne retourne que la colonne du nom des tables. Le mot codice_16 permet d'en ajouter une deuxième appelée `Table_type` :
 SHOW FULL TABLES;
Elle peut contenir trois valeurs différentes : 'BASE TABLE' pour les tables, 'VIEW' pour les vues, et 'SYSTEM VIEW' pour les tables spéciales du serveur (généralement celles de la base "INFORMATION_SCHEMA").
Donc pour lister les vues :
 SHOW FULL TABLES WHERE `Table_type`='VIEW';
Filtrer les tables ouvertes.
La liste des tables non temporaires (sans les vues) ouvertes dans le cache :
 SHOW OPEN TABLES;
Supprimer toutes les tables.
Il faut exécuter le résultat de cette requête :
SELECT CONCAT('DROP ', table_name, ';') as stmt
FROM information_schema.tables
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'nom_de_la_base';
Supprimer toutes les vues.
SELECT CONCAT('DROP VIEW ', table_name, ';') as stmt
FROM information_schema.views
WHERE TABLE_SCHEMA = 'nom_de_la_base';
Supprimer toutes les procédures stockées.
SELECT CONCAT('DROP ', ROUTINE_TYPE, ' `', ROUTINE_SCHEMA, '`.`', ROUTINE_NAME, '`;') as stmt
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'nom_de_la_base';
Lister les champs.
Les commandes suivantes correspondent aux informations de la table "COLUMNS" de "INFORMATION_SCHEMA".
codice_5 le permet également.
DESCRIBE.
 USE `base`;
 DESCRIBE `table`;
-- ou
 DESCRIBE `base`.`table`;
Le résultat contient six colonnes :
codice_18 est un alias de codice_19.
 USE `base`;
 DESC `table` 'filtre';
'filtre' peut être un nom de colonne. S'il est spécifié, seule cette colonne sera affichée. Si 'filtre' contient '%' ou '_', il sera évalué comme une condition codice_12. Par exemple, pour obtenir tous les champs commençant par 'wiki' :
 DESC `table` 'wiki%';
EXPLAIN.
Synonyme de codice_18 :
 EXPLAIN `table`;
SHOW FIELDS.
Autre synonyme de codice_18 :
 SHOW FIELDS FROM `table`; 
Remarque : le mot FULL rajoute une colonne "Privileges" et une "Comment" :
 SHOW FULL FIELDS FROM `table`; 
La colonne des commentaires peut servir à expliquer la signification du nom d'un champ, en apparaissant sous ce dernier lors des sélection dans PhpMyAdmin, et peut même être interprétée par certains logiciels. Par exemple, l' comprend le commentaire "DC2Type:array" pour choisir comment les tableaux stockés en LONGTEXT.
SHOW COLUMNS.
Autre synonyme de codice_18 :
 SHOW COLUMNS FROM `table`;
En fait codice_24 et codice_25 sont synonymes. EXPLAIN et DESC ne supportent pas toutes leurs clauses (filtre).
De plus, les syntaxes ci-dessous sot équivalentes :
 SHOW COLUMNS FROM `table` FROM `base`;
-- ou
 SHOW COLUMNS FROM `base`.`table`;
Lister les indexes.
Les commande suivantes renseignent sur les indexes d'une table, ses clés. Elles sont aussi dans la table `COLUMNS` de "INFORMATION_SCHEMA", et accessibles via codice_26.
 SHOW INDEX FROM `TABLE`;
 SHOW INDEX FROM `TABLE` FROM `bases`;
Exemple de résultat :
Le mot codice_27 est synonyme de codice_28. Aucune autre clause n'est possible avec.
Pour supprimer un index :
DROP INDEX `date_2` on `Table1` 
Un alias existe aussi : codice_29.
Lister les clés étrangères.
Pour le nom des clés étrangères d'une table :
SELECT column_name, constraint_name FROM `information_schema`.`KEY_COLUMN_USAGE` where table_name = 'maTable'

MySQL/Spécifier les noms
Afin de distinguer les variables des mots réservés, on place les identificateurs MySQL (noms des tables, champs, et bases) entre deux accents graves (codice_1). Il s'agit du caractère ASCII 96, disponible sous Linux en pressant les deux touches codice_2 + codice_3.
Généralement il est optionnel, mais il permet de meilleurs messages d'erreur, par exemple :
 mysql> SELECT user_id, group_id FROM user,group LIMIT 1;
 ERROR 1064 (42000): You have an error in your SQL syntax;
 check the manual that corresponds to your MySQL server version
 for the right syntax to use near 'group LIMIT 1' at line 1
vs :
 mysql> SELECT user_id, group_id FROM `user`,`group` LIMIT 1;
 ERROR 1146 (42S02): Table 'savannah.group' doesn't exist
Montre qu'il manquait un "s" à "group":
 mysql> SELECT user_id, group_id FROM `user`,`groups` LIMIT 1;
 | user_id | group_id |
 | 100 | 2 |
 1 row in set (0.02 sec)
Cette syntaxe autorise l'utilisateur à employer des mots réservés dans leurs noms d'objets. On peut même utiliser des accents graves en les tapant deux fois, à la manière des caractères d'échappement :
 RENAME TABLE `user` TO ````
Par contre cette syntaxe n'est pas portable, car le standard SQL recommande le guillemet (codice_4).