« MySQL/Parcourir les bases de données » : différence entre les versions

Contenu supprimé Contenu ajouté
DannyS712 (discussion | contributions)
m <source> -> <syntaxhighlight> (phab:T237267)
Ligne 6 :
 
Il est possible d'y stocker l'historique des requêtes entrées sur le serveur en activant :
<sourcesyntaxhighlight lang=mysql>
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
</syntaxhighlight>
</source>
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.
<sourcesyntaxhighlight lang=mysql>
SET GLOBAL general_log = 'OFF';
SELECT * FROM mysql.general_log;
</syntaxhighlight>
</source>
 
== INFORMATION_SCHEMA ==
Ligne 30 :
== Exemples d'utilisation ==
=== Rechercher un nom de colonne dans toutes les tables d'une base ===
<sourcesyntaxhighlight lang=mysql>
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%ma_recherche%';
</syntaxhighlight>
</source>
 
=== Lister les tables les plus volumineuses ===
Pour trier les tables par taille :
<sourcesyntaxhighlight lang=mysql>
SELECT TABLE_NAME, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH
FROM information_schema.TABLES
WHERE table_schema = "ma_base"
ORDER BY DATA_LENGTH DESC;
</syntaxhighlight>
</source>
 
Pour avoir la taille d'une table, ajouter :
Ligne 52 :
 
Toutes :
<sourcesyntaxhighlight lang=sql>
SHOW DATABASES;
</syntaxhighlight>
</source>
 
le mot clé <code>SCHEMA</code> peut être utilisé en lieu et place de <code>DATABASES</code>. MySQL ne supporte pas les <code>SCHEMA</code> des standards SQL, donc il est synonyme de <code>DATABASES</code>. il a été ajouté pour la compatibilité avec d'autres SGBD.
 
===Ajouter un filtre sur les noms des bases ===
<sourcesyntaxhighlight lang=sql>
SHOW DATABASES LIKE 'expression';
</syntaxhighlight>
</source>
L'opérateur <code>LIKE</code> fonctionne selon le {{w|langage de manipulation de données}} standard. Donc il est faisable de lister toutes les bases commençant par 'wiki' ainsi :
<sourcesyntaxhighlight lang=sql>
SHOW DATABASES LIKE 'wiki%';
</syntaxhighlight>
</source>
 
=== Filtres complexes ===
 
En utilisant la clause <code>WHERE</code> :
<sourcesyntaxhighlight lang=sql>
SHOW DATABASES WHERE conditions;
</syntaxhighlight>
</source>
Elle autorise les {{w|Expression rationnelle|expressions rationnelles}}, les opérateur de comparaison '=', '<' et '>', et les fonctions sur les chaines de caractères.
 
Ligne 84 :
 
===Show all tables===
<sourcesyntaxhighlight lang=sql>
USE `database`;
SHOW TABLES;
 
SHOW TABLES FROM `database`;
</syntaxhighlight>
</source>
Les deux formes sont équivalentes.
 
=== Appliquer un filtre ===
La syntaxe est la même que pour les bases :
<sourcesyntaxhighlight lang=sql>
SHOW TABLES LIKE `expression`;
SHOW TABLES WHERE condition;
</syntaxhighlight>
</source>
 
De plus, par défaut <code>SHOW TABLES</code> ne retourne que la colonne du nom des tables. Le mot <code>FULL</code> permet d'en ajouter une deuxième appelée `Table_type` :
<sourcesyntaxhighlight lang=sql>
SHOW FULL TABLES;
</syntaxhighlight>
</source>
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 :
<sourcesyntaxhighlight lang=sql>
SHOW FULL TABLES WHERE `Table_type`='VIEW';
</syntaxhighlight>
</source>
 
=== Filtrer les tables ouvertes ===
 
La liste des tables non temporaires (sans les vues) ouvertes dans le cache :
<sourcesyntaxhighlight lang=sql>
SHOW OPEN TABLES;
</syntaxhighlight>
</source>
 
=== Supprimer toutes les tables ===
Il faut exécuter le résultat de cette requête :
<sourcesyntaxhighlight lang=mysql>
SELECT CONCAT('DROP ', table_name, ';') as stmt
FROM information_schema.tables
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'nom_de_la_base';
</syntaxhighlight>
</source>
 
=== Supprimer toutes les vues ===
<sourcesyntaxhighlight lang=mysql>
SELECT CONCAT('DROP ', table_name, ';') as stmt
FROM information_schema.views
WHERE TABLE_SCHEMA = 'nom_de_la_base';
</syntaxhighlight>
</source>
 
=== Supprimer toutes les procédures stockées ===
<sourcesyntaxhighlight lang=mysql>
SELECT CONCAT('DROP ', ROUTINE_TYPE, ' `', ROUTINE_SCHEMA, '`.`', ROUTINE_NAME, '`;') as stmt
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'nom_de_la_base';
</syntaxhighlight>
</source>
 
== Lister les champs ==
Ligne 146 :
 
=== DESCRIBE ===
<sourcesyntaxhighlight lang=sql>
USE `base`;
DESCRIBE `table`;
-- ou
DESCRIBE `base`.`table`;
</syntaxhighlight>
</source>
 
Le résultat contient six colonnes :
Ligne 162 :
 
<code>DESC</code> est un alias de <code>DESCRIBE</code>.
<sourcesyntaxhighlight lang=sql>
USE `base`;
DESC `table` 'filtre';
</syntaxhighlight>
</source>
 
'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 <code>LIKE</code>. Par exemple, pour obtenir tous les champs commençant par 'wiki' :
<sourcesyntaxhighlight lang=sql>
DESC `table` 'wiki%';
</syntaxhighlight>
</source>
 
=== EXPLAIN ===
Synonyme de <code>DESC</code> :
<sourcesyntaxhighlight lang=sql>
EXPLAIN `table`;
</syntaxhighlight>
</source>
 
=== SHOW FIELDS ===
Autre synonyme de <code>DESC</code> :
<sourcesyntaxhighlight lang=sql>
SHOW FIELDS FROM `table`;
</syntaxhighlight>
</source>
Remarque : le mot FULL rajoute une colonne "Privileges" et une "Comment" :
<sourcesyntaxhighlight lang=sql>
SHOW FULL FIELDS FROM `table`;
</syntaxhighlight>
</source>
 
{|class = "wikitable"
Ligne 198 :
=== SHOW COLUMNS ===
Autre synonyme de <code>DESC</code> :
<sourcesyntaxhighlight lang=sql>
SHOW COLUMNS FROM `table`;
</syntaxhighlight>
</source>
En fait <code>FIELDS</code> et <code>COLUMNS</code> sont synonymes. EXPLAIN et DESC ne supportent pas toutes leurs clauses (filtre).
 
De plus, les syntaxes ci-dessous sot équivalentes :
<sourcesyntaxhighlight lang=sql>
SHOW COLUMNS FROM `table` FROM `base`;
-- ou
SHOW COLUMNS FROM `base`.`table`;
</syntaxhighlight>
</source>
 
== 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 <code>mysqlshow -k</code>.
<sourcesyntaxhighlight lang=mysql>
SHOW INDEX FROM `TABLE`;
SHOW INDEX FROM `TABLE` FROM `bases`;
</syntaxhighlight>
</source>
Exemple de résultat :
{|class="wikitable"
Ligne 228 :
 
Pour supprimer un index :
<sourcesyntaxhighlight lang=mysql>
DROP INDEX `date_2` on `Table1`
</syntaxhighlight>
</source>
 
Un alias existe aussi : <code>SHOW KEYS FROM `TABLE`;</code>.
Ligne 237 :
 
Pour le nom des clés étrangères d'une table :
<sourcesyntaxhighlight lang=mysql>
SELECT column_name, constraint_name FROM `KEY_COLUMN_USAGE` where table_name = 'maTable'
</syntaxhighlight>
</source>