# MySQL: aide-memoire {{METATOC 4-5}} #### Commandes MySQL pratiques ^ Description ^ Commande ^ | Pour se connecter (à partir du shell Unix), utiliser -h uniquement si nécessaire. | `[mysql dir]/bin/mysql -h hostname -u root -p` | | Créer une base de données sur le serveur SQL. | `create database [nom de la base de donnée];` | | Pour voir toutes les bases de données sur le serveur SQL. | `show databases;` | | Basculer vers une base de données. | `use [nom de la base de donnée];` | | Pour voir toutes les tables de la base de données. | `show tables;` | | Pour voir les formats de champ de la base de données. | `describe [table name];` | | Pour supprimer une base de données. | `drop database [nom de la base de données];` | | Pour supprimer une table. | `drop table [nom de la table];` | | Afficher toutes les données dans un tableau. | `SELECT * FROM [nom de la table];` | | Renvoie les colonnes et les informations de colonne relatives à la table désignée. | `show columns from [nom de la table];` | | Afficher certaines lignes sélectionnées avec la valeur «whatever». | `SELECT * FROM [table name] WHERE [field name] = "whatever";` | | Afficher tous les enregistrements contenant le nom «Bob» ET le numéro de téléphone «3444444». | `SELECT * FROM [table name] WHERE name = "Bob" AND phone_number = '3444444';` | | Afficher tous les enregistrements ne contenant pas le nom «Bob» ET le numéro de téléphone «3444444» dans le champ phone\_number. | `SELECT * FROM [table name] WHERE name != "Bob" AND phone_number = '3444444' order by phone_number;` | | Afficher tous les enregistrements commençant par les lettres «bob» ET le numéro de téléphone «3444444». | `SELECT * FROM [table name] WHERE name like "Bob%" AND phone_number = '3444444';` | | Utiliser une expression régulière pour rechercher des enregistrements. Utiliser "REGEXP BINARY" pour forcer le respect de la casse. Cela trouve tout enregistrement commençant par un. | `SELECT * FROM [table name] WHERE rec RLIKE "^a$";` | | Afficher les enregistrements uniques. | `SELECT DISTINCT [column name] FROM [table name];` | | Afficher les enregistrements sélectionnés triés par ordre croissant (asc) ou décroissant (desc). | `SELECT [col1],[col2] FROM [table name] ORDER BY [col2] DESC;` | | Compter les lignes. | `SELECT COUNT(*) FROM [table name];` | | Joindre des tables sur des colonnes communes. | `select lookup.illustrationid, lookup.personid,person.birthday from lookup left join person on lookup.personid=person.personid=statement to join birthday in person table with primary illustration id;` | | Basculer vers la base de données mysql. Créer un nouvel utilisateur. | `INSERT INTO [table name] (Host,User,Password) VALUES('%','user',PASSWORD('password'));` | | Changer le mot de passe d'un utilisateur (à partir du shell unix). | `[mysql dir]/bin/mysqladmin -u root -h hostname.blah.org -p password 'new-password'` | | Modifier le mot de passe d'un utilisateur (à partir de l'invite MySQL). | `SET PASSWORD FOR 'user'@'hostname' = PASSWORD('passwordhere');` | | Basculer vers mysql db.Donner des privilèges utilisateur pour une base de données. | `INSERT INTO [table name] (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv) VALUES ('%','db','user','Y','Y','Y','Y','Y','N');` | | Pour mettre à jour les informations déjà dans un tableau. | `UPDATE [table name] SET Select_priv = 'Y',Insert_priv = 'Y',Update_priv = 'Y' where [field name] = 'user';` | | Supprimer une ou plusieurs lignes d'un tableau. | `DELETE from [table name] where [field name] = 'whatever';` | | Metter à jour les autorisations/privilèges de la base de données. | `FLUSH PRIVILEGES;` | | Supprimer une colonne. | `alter table [table name] drop column [column name];` | | Ajouter une nouvelle colonne à db. | `alter table [table name] add column [new column name] varchar (20);` | | Changer le nom de la colonne. | `alter table [table name] change [old column name] [new column name] varchar (50);` | | Créer une colonne unique pour ne pas avoir de doubles. | `alter table [table name] add unique ([column name]);` | | Agrandir une colonne. | `alter table [table name] modify [column name] VARCHAR(3);` | | Supprimer l'index de la table. | `alter table [table name] drop index [colmn name];` | | Charger un fichier CSV dans une table. | `LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);` | | Dump toutes les bases de données pour la sauvegarde. Le fichier de sauvegarde contient des commandes sql pour recréer toutes les bases de données. | `[mysql dir]/bin/mysqldump -u root -ppassword --opt >/tmp/alldatabases.sql` | | Dump d'une base de données pour la sauvegarde. | `[mysql dir]/bin/mysqldump -u username -ppassword --databases databasename >/tmp/databasename.sql` | | Dump d'une table d'une base de données. | `[mysql dir]/bin/mysqldump -c -u username -ppassword databasename tablename > /tmp/databasename.tablename.sql` | | Restaurer la base de données (ou la table de base de données) à partir de la sauvegarde. | `[mysql dir]/bin/mysql -u username -ppassword databasename < /tmp/databasename.sql` | | Exemple de création de table 1. | `CREATE TABLE [table name] (firstname VARCHAR(20), middleinitial VARCHAR(3), lastname VARCHAR(35),suffix VARCHAR(3), | officeid VARCHAR(10),userid VARCHAR(15),username VARCHAR(8),email VARCHAR(35),phone VARCHAR(25), groups | VARCHAR(15),datestamp DATE,timestamp time,pgpemail VARCHAR(255));` | | Exemple de création de table 2. | `create table [table name] (personid int(50) not null auto_increment primary key,firstname varchar(35),middlename varchar(50),lastname varchar(50) default 'bato');` | #### Commandes par thèmes ##### commandes générales * Connexion : `mysql -u [nom d'utilisateur] -p;` (demandera le mot de passe) * Afficher toutes les bases de données: `show databases` * Accéder directement à une base de données: `mysql -u [nom d'utilisateur] -p [base de données]` (demandera le mot de passe) * Créer une nouvelle base de données: `create database [database];` * Sélectionner une base de données: `use [database];` * Déterminer quelle base de données est utilisée: `select database ();` * Afficher toutes les tables: `show tables;` * Afficher la structure de la table: `describe [table];` * Répertorier tous les index d'une table: `show index from [table];` * Créer une nouvelle table avec des colonnes: `CREATE TABLE [table] ([colonne] VARCHAR (120), [une autre colonne] DATETIME);` * Ajouter une colonne: `ALTER TABLE [table] ADD COLUMN [colonne] VARCHAR (120);` * Ajouter une colonne avec un ID unique à incrémentation automatique: `ALTER TABLE [table] ADD COLUMN [colonne] int NON NULL AUTO_INCREMENT PRIMARY KEY;` * Insérer un enregistrement: `INSERT INTO [table] ([colonne], [colonne]) VALUES ('[valeur]', [valeur] ');` **note:** Fonction MySQL pour l’entrée datetime: `NOW ()` * Sélectionner des enregistrements: `SELECT * FROM [table];` * Explain records: `EXPLAIN SELECT * FROM [table];` * Sélectionner des parties d'enregistrements: `SELECT [colonne], [autre-colonne] FROM [table];` * Compter le nombre d'enregistrements: `SELECT COUNT ([colonne]) FROM [table];` * Sélectionner et compter le nombre d'enregistrements groupés: `SELECT *, (SELECT COUNT ([colonne]) FROM [table]) AS compte à partir de [table] GROUP BY [colonne];` * Sélectionner des enregistrements spécifiques: `SELECT * FROM [table] WHERE [colonne] = [valeur];` (Sélecteurs: `<`, `>`, `! =`; Combiner plusieurs sélecteurs avec `AND`,` OR`) * Sélectionner les enregistrements contenant `[valeur]`: `SELECT * FROM [table] WHERE [colonne] LIKE '% [valeur]%';` * Sélectionner les enregistrements commençant par `[valeur]`: `SELECT * FROM [table] WHERE [colonne] LIKE '[valeur]%';` * Sélectionner les enregistrements commençant par `val` et se terminant par` ue`: `SELECT * FROM [table] WHERE [colonne] LIKE '[val_ue]';` * Sélectionner une plage: `SELECT * FROM [table] WHERE [colonne] ENTRE [valeur1] et [valeur2];` * Sélectionner avec l'ordre personnalisé et uniquement la limite: `SELECT * FROM [table] WHERE [colonne] ORDER BY [colonne] ASC LIMIT [valeur];` (Ordre: `DESC`,` ASC`) * Mettre à jour des enregistrements: `UPDATE [table] SET [colonne] = '[valeur mise à jour]' WHERE [colonne] = [valeur];` * Supprimer des enregistrements: `DELETE FROM [table] WHERE [colonne] = [valeur];` * Supprimer tous les enregistrements d'une table (sans supprimer la table elle-même): `DELETE * FROM [table];` * (Ceci réinitialise également le compteur d'incrémentation pour les colonnes générées automatiquement, comme une colonne id.) * Supprimer tous les enregistrements d'une table: `truncate table [table];` * Supprimer des colonnes de table: `ALTER TABLE [table] DROP COLUMN [column];` * Supprimer une table: `DROP TABLE [table];` * Supprimer une base de données: `DROP DATABASE [base de données];` * Donner un nom de colonne personnalisées à une sortie: `SELECT [colonne] AS [colonne personnalisée] FROM [table];` * Exporter une sauvegarde de base de données: `mysqldump -u [nom d'utilisateur] -p [base de données]> db_backup.sql` **Note:** Utiliser l'option `--lock-tables = false` pour suvegarder les tables verrouillées * Importer un vidage de la base de données: `mysql -u [nom d'utilisateur] -p -h localhost [base de données] = 2015-01-01 00: 00: 00` * Calculer le nombre total d’enregistrements: `SELECT SUM ([colonne]) FROM [table];` * Compter le nombre total de `[colonne]` et grouper par `[catégorie-colonne]`: `SELECT [catégorie-colonne], SUM ([colonne]) FROM [table] GROUP BY [catégorie-colonne];` * Obtenir la plus grande valeur dans `[colonne]`: `SELECT MAX ([colonne]) FROM [table];` * Obtenir la plus petite valeur: `SELECT MIN ([colonne]) FROM [table];` * Obtenir la valeur moyenne: `SELECT AVG ([colonne]) FROM [table];` * Obtenir la valeur moyenne arrondie et le groupe par `[catégorie-colonne]`: `SELECT [catégorie-colonne], ROUND (AVG ([colonne]), 2) FROM [table] GROUP BY [catégorie-colonne];` ##### Manipuler plusieurs tables * Sélectionner parmi plusieurs tables: `SELECT [table1]. [Colonne], [table1]. [Une autre colonne], [table2]. [Colonne] FROM [table1], [table2];` * Combiner des lignes de différentes tables: `SELECT * FROM [table1] INNER JOIN [table2] ON [table1]. [Colonne] = [table2]. [Colonne];` * Combiner des lignes de différentes tables sans nécessiter la condition de jointure: `SELECT * FROM [table1] LEFT OUTER JOIN [table2] ON [table1]. [Colonne] = [table2]. [Colonne];` (la table de gauche est la premier tableau qui apparaît dans la déclaration.) * Renommer la colonne ou la table à l'aide d'un _alias_: `SELECT [table1]. [Colonne] AS '[valeur]', [table2]. [Colonne] AS '[valeur]' FROM [table1], [table2]; ` ##### Fonctions utilisateurs * Répertorier tous les utilisateurs: `SELECT User, Host FROM mysql.user;` * Créer un nouvel utilisateur: nom d'utilisateur `CREATE USER @ localhost IDENTIFIED BY password ;` * Accorder à tous les utilisateurs un accès "ALL" aux tables "*": `GRANT ALL ON base. * TO" utilisateur "@" localhost ";` ##### Découvrir l'adresse IP de l'hôte Mysql `SHOW VARIABLES WHERE Nom_variable = 'nom_hôte';`