Vous êtes sur la page 1sur 11

MySQL

Connexion Client
mysql -h localhost u root -pmotdepassetopsecret l'hte : c'est--dire l'endroit o est localis le serveur ; le nom d'utilisateur ; et le mot de passe de l'utilisateur.

Dconnexion
Commande : quit ou exit

Syntaxe
1. 2. 3. 4. 5. 6. SELECT ou SELECT SELECT ou SELECT 'Hello World !'; 'Salut l\'ami'; (5+3)*2; (5+3)*2, 5+3*2;

Pour terminer une instruction SQL, on utilise le caractre ; En SQL, les chanes de caractres doivent tre entoures de guillemets simples ' Commentaires avec 2 tirets (Accepte uniquement si les deux tirets sont suivis d'un espace au moins)

Quelques autres caractres spciaux : \n retour la ligne \t tabulation \ % _ antislash (il faut chapper le caractre d'chappement) pourcent soulign

Utilisateur
1. GRANT ALL PRIVILEGES ON elevage.* TO 'nomutilisateur'@'localhost' IDENTIFIED BY 'mot_de_passe'; GRANT ALL PRIVILEGES : Cette commande permet d'attribuer tous les droits (c'est--dire insertions de donnes, slections, modifications, suppressions) ON elevage.* : dfinit les bases de donnes et les tables sur lesquelles ces droits sont acquis. Donc ici, on donne les droits sur la base "elevage" (qui n'existe pas encore, mais ce n'est pas grave, nous la crerons plus tard), pour toutes les tables de cette base (grce *). TO 'nomutilisateur' : dfinit l'utilisateur auquel on accorde ces droits. Si l'utilisateur n'existe pas, il est cr. @'localhost' : dfinit partir d'o l'utilisateur peut exercer ces droits. Dans notre cas, 'localhost', donc il devra tre connect partir de cet ordinateur. IDENTIFIED BY 'mot_de_passe': dfinit le mot de passe de l'utilisateur.

Les types de donnes


Types Numriques
Type TINYINT SMALLINT Nombre d'octets 1 2 -128 -32768 -8388608 -2147483648 Minimum 127 32767 8388607 2147483647 Maximum

MEDIUMINT 3 INT BIGINT 4 8

-9223372036854775808 9223372036854775807

L'attribut UNSIGNED permet de forcer une valeur positive

Nombre dcimaux
Le mot-cl FLOAT peut s'utiliser sans paramtre, auquel cas quatre octets sont utiliss pour stocker les valeurs de la colonne FLOAT est normalement plus prcis, stockage dans 8 octets.

Types alphanumriques
Pour stocker un texte relativement court (moins de 255 octets), vous pouvez utiliser les types CHAR(x) et VARCHAR(x). Sinon, pour un plus grand texte : Type TINYTEXT TEXT Longueur maximale 2^8 octets 2^16 octets Mmoire occupe Longueur de la chane + 1 octet Longueur de la chane + 2 octets Longueur de la chane + 3 octets Longueur de la chane + 4 octets

MEDIUMTEXT 2^24 octets LONGTEXT 2^32 octets

Types temporels
Type DATE Date par dfaut ("zro") '0000-00-00'

DATETIME '0000-00-00 00:00:00' TIME YEAR '00:00:00' 0000

Cration
CREATE DATABASE nom_base CHARACTER SET 'utf8';

Suppression
1. DROP DATABASE nom_base; 2. -- ou 3. DROP DATABASE IF EXISTS nom_base; -- Pour viter ce message d'erreur, si vous n'tes pas srs que la base de donnes existe

Utilisation de la base
1. USE nom_base

Cration de tables (CREATE TABLE)


Caractristique Nom du champ Type SMALLINT NULL? Non Divers Cl primaire + auto-incrment + UNSIGNED -

Numro d'identit id Espce Sexe espece sexe

VARCHAR(40) Non CHAR(1) Oui Non Oui

Date de naissance date_naissance DATETIME Commentaires Nom commentaires nom TEXT

VARCHAR(30) Oui

1. CREATE TABLE Animal ( 2. id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, 3. espece VARCHAR(40) NOT NULL, 4. sexe CHAR(1), 5. date_naissance DATETIME NOT NULL, 6. nom VARCHAR(30), 7. commentaires TEXT, 8. PRIMARY KEY (id) 9. ) 10. ENGINE=INNODB; -- ou MyISAM (mais ne gre pas les cls trangres)

Vrifications
1. SHOW DATABASES; 2. SHOW TABLES; 3. DESCRIBE Animal;

-- liste les bases de donnes -- liste les tables de la base de donnes -- liste les colonnes de la table avec leurs caractristiques

Suppression dune table


1. DROP TABLE Animal;

Modification dune table


1. ALTER TABLE nom_table ADD ... -- permet d'ajouter quelque chose (une colonne par 2. ALTER TABLE nom_table DROP ... -- permet de retirer quelque chose 3. ALTER TABLE nom_table CHANGE ... 4. ALTER TABLE nom_table MODIFY ... -- permettent de modifier une colonne

exemple)

Ajout
1. 2. 3. 4. 5. ALTER TABLE nom_table ADD [COLUMN] nom_colonne description_colonne; -- Exemple ALTER TABLE Test_tuto ADD COLUMN date_insertion DATE NOT NULL;

Suppression
1. ALTER TABLE nom_table 2. DROP [COLUMN] nom_colonne;

Changement du nom de la colonne


1. ALTER TABLE nom_table 2. CHANGE ancien_nom nouveau_nom description_colonne;

Changement du type de donnes


1. ALTER TABLE nom_table 2. CHANGE ancien_nom nouveau_nom nouvelle_description; 3. ALTER TABLE nom_table 4. MODIFY nom_colonne nouvelle_description;

Exemple :
1. ALTER TABLE Test_tuto 2. CHANGE prenom nom VARCHAR(30) NOT NULL; -- Changement du type + changement du

nom
3. ALTER TABLE Test_tuto 4. CHANGE id id BIGINT NOT NULL; -- Changement du type sans renommer 5. ALTER TABLE Test_tuto 6. MODIFY id BIGINT NOT NULL AUTO_INCREMENT; -- Ajout de l'auto-incrmentation 7. ALTER TABLE Test_tuto 8. MODIFY nom VARCHAR(30) NOT NULL DEFAULT 'Blabla'; -- Changement de la

description (mme type mais ajout d'une valeur par dfaut)

Insertion de donnes
Insertion sans prciser les colonnes
1. 2. 3. 4. 5. INSERT VALUES -- ou INSERT VALUES INTO Animal (1, 'chien', 'M', '2010-04-05 13:43:00', 'Rox', 'Mordille beaucoup'); INTO Animal (NULL , 'chat', 'F', '2010-09-13 15:02:00', 'Schtroumpfette', NULL);

Insertion en prcisant les colonnes


1. 2. 3. 4. 5. 6. INSERT VALUES INSERT VALUES INSERT VALUES INTO Animal (espece, sexe, date_naissance) ('tortue', 'F', '2009-08-03 05:12:00'); INTO Animal (nom, commentaires, date_naissance, espece) ('Choupi', 'N sans oreille gauche', '2010-10-03 16:44:00', 'chat'); INTO Animal (espece, date_naissance, commentaires, nom, sexe) ('tortue', '2009-06-13 08:17:00', 'Carapace bizarre', 'Bobosse', 'F');

Insertion multiple
1. 2. 3. 4. INSERT INTO Animal (espece, sexe, date_naissance, nom) VALUES ('chien', 'F', '2008-12-06 05:18:00', 'Caroline'), ('chat', 'M', '2008-09-11 15:38:00', 'Bagherra'), ('tortue', NULL, '2010-08-23 05:18:00', NULL);

Pour vrifier
1. SELECT * FROM Animal;

Syntaxe alternative de MySQL


2. INSERT INTO Animal 3. SET nom='Bobo', espece='chien', sexe='M', date_naissance='2010-07-21 15:41:00';

Slection de donnes
Syntaxe de SELECT
1. 2. 3. 4. 5. 6. 7. 8. SELECT colonne1, colonne2, ... FROM nom_table; exemple SELECT * FROM Animal; ou SELECT espece, nom, sexe FROM Animal;

La clause WHERE Les oprateurs de comparaison


Oprateur = < <= > >= <> ou != <=> gal infrieur infrieur ou gal suprieur suprieur ou gal diffrent gal (valable pour NULL aussi) Signification

Combinaisons de critres
Oprateur Symbole Signification AND OR XOR NOT ! && || ET OU OU exclusif NON

Exemple :
1. SELECT * 2. FROM Animal 3. WHERE espece='chat' 4. AND sexe='F'; 5. -- OU 6. SELECT * 7. FROM Animal 8. WHERE espece='chat' 9. && sexe='F'; 10. -- OU 11. SELECT * 12. FROM Animal 13. WHERE espece='tortue' 14. OR espece='perroquet'; 15. -- OU 16. SELECT * 17. FROM Animal 18. WHERE espece='tortue' 19. || espece='perroquet';

Slection complexe exemple :


les animaux ns aprs 2009 ; les chats : o mles ; o et femelles nes avant juin 2007.

1. 2. 3. 4. 5.

SELECT * FROM Animal WHERE date_naissance > '2009-12-31' OR ( espece='chat' AND ( sexe='M' OR ( sexe='F' AND date_naissance < '2007-06-01' )) 6. );

Le cas de NULL
1. SELECT * 2. FROM Animal 3. WHERE nom <=> NULL; -- slection des animaux sans nom 4. -- OU 5. SELECT * 6. FROM Animal 7. WHERE nom IS NULL; 8. -- OU 9. SELECT * 10. FROM Animal 11. WHERE commentaires IS NOT NULL; -- slection des animaux pour lesquels un

commentaire existe

Tri des donnes


ASC pour ascendant, et DESC pour descendant Exemple : 1. 2. 3. 4. 5. 6. 7. 8. 9. SELECT * FROM Animal WHERE espece='chien' AND nom IS NOT NULL ORDER BY nom DESC; ou plusieurs colonnes SELECT * FROM Animal ORDER BY espece, date_naissance;

liminer les doublons


Mot-cl DISTINCT 1. SELECT DISTINCT espece 2. FROM Animal;

Restreindre les rsultats


LIMIT s'utilise avec deux paramtres. LIMIT nombre_de_lignes [OFFSET decalage]; Le nombre de lignes que l'on veut rcuprer. Le dcalage, introduit par le mot-cl OFFSET et qui indique partir de quelle ligne on rcupre les rsultats. Ce paramtre est facultatif. S'il n'est pas prcis, il est mis 0.

Exemple : 1. 2. 3. 4. SELECT * FROM Animal ORDER BY id LIMIT 6 OFFSET 0;

5. 6. 7. 8. 9.

-- ou SELECT * FROM Animal ORDER BY id LIMIT 6 OFFSET 3;

Recherche approximative
L'oprateur LIKE : '%' : qui reprsente n'importe quelle chane de caractres, quelle que soit sa longueur (y compris une chane de longueur 0) ; '_' : qui reprsente un seul caractre (ou aucun).

Exemple : 1. 2. 3. 4. 5. 6. 7. SELECT * FROM Animal WHERE nom LIKE '%Lu%'; -- insensible la casse -- ou SELECT * FROM Animal WHERE nom LIKE BINARY '%Lu%'; -- sensible la casse

Recherche dans un intervalle


1. 2. 3. 4. SELECT * FROM Animal WHERE date_naissance <= '2009-03-23' AND date_naissance >= '2008-01-05';

Ou BETWEEN minimum AND maximum 1. SELECT * 2. FROM Animal 3. WHERE date_naissance BETWEEN '2008-01-05' AND '2009-03-23'; BETWEEN BINARY 'a' AND BINARY 'd' Sensible la casse Bien videmment, on peut aussi exclure un intervalle avec NOT BETWEEN.

Set de critres, oprateur IN


1. SELECT * 2. FROM Animal 3. WHERE nom IN ('Moka', 'Bilba', 'Tortilla', 'Balou', 'Dana', 'Redbul', 'Gingko');

Modification ligne
1. UPDATE nom_table 2. SET col1 = val1 [, col2 = val2, ...] 3. [WHERE ...]; 4. ou sur toutes les lignes 5. UPDATE Animal 6. SET commentaires='modification de toutes les lignes'; 7. exemple 8. UPDATE Animal 9. SET sexe='F', nom='Pataude' lanimal tait une femelle 10. WHERE id=21;

Suppression ligne
1. 2. 3. 4. DELETE FROM nom_table WHERE critres; ou pour supprimer toutes les lignes DELETE FROM Animal;

Utilisation de fichiers externes


Excuter des commandes SQL partir d'un fichier
1. SOURCE C:\Document and Settings\dossierX\monFichier.sql; 2. ou 3. \. monFichier.sql;

Sauvegarde d'une base de donnes


mysqldump -u user -p --opt nom_de_la_base > sauvegarde.sql mysqldump : il s'agit du client permettant de sauvegarder les bases. Rien de spcial signaler. --opt : c'est une option de mysqldump qui lance la commande avec une srie de paramtres qui font que la commande s'effectue trs rapidement. nom_de_la_base : vous l'avez sans doute devin, c'est ici qu'il faut indiquer le nom de la base qu'on veut sauvegarder. > sauvegarde.sql : le signe > indique que l'on va donner la destination de ce qui va tre gnr par la commande : sauvegarde.sql. Il s'agit du nom du fichier qui contiendra la sauvegarde de notre base. Vous pouvez bien sr l'appeler comme bon vous semble.

Gestion des utilisateurs


Les tables de base :
information_schema : cette base de donnes stocke les informations sur toutes les bases de donnes. Les tables, les colonnes, le type des colonnes, les procdures des bases de donnes y sont recenses, avec leurs caractristiques. Nous verrons cette base de donnes plus en dtail dans le prochain chapitre. performance_schema : permet de stocker des informations sur les actions effectues sur le serveur (temps d'excution, temps d'attente dus aux verrous, etc.) test : il s'agit d'une base de test automatiquement cre. Si vous ne l'avez pas utilise, elle ne contient rien. mysql : qui contient de nombreuses informations sur le serveur. Entre autres, c'est dans cette base que sont stocks les utilisateurs et leurs privilges .

Stockage des utilisateurs et privilges


db : privilges au niveau des bases de donnes. tables_priv : privilges au niveau des tables. columns_priv : privilges au niveau des colonnes. proc_priv : privilges au niveau des routines (procdures et fonctions stockes).

Cration et suppression Cration


1. CREATE USER 'login'@'hote' [IDENTIFIED BY 'mot_de_passe'];

Suppression
1. DROP USER 'login'@'hote';

Exemple :
1. 2. 3. 4. CREATE USER 'max'@'localhost' IDENTIFIED BY 'maxisthebest'; CREATE USER 'elodie'@'194.28.12.4' IDENTIFIED BY 'ginko1'; CREATE USER 'gabriel'@'arb.brab.net' IDENTIFIED BY 'chinypower';

-- thibault peut se connecter partir de n'importe quel hte dont l'adresse IP commence par 194.28.12.

5. CREATE USER 'thibault'@'194.28.12.%' IDENTIFIED BY 'basketball8'; 6. 7. -- joelle peut se connecter partir de n'importe quel hte du domaine brab.net 8. CREATE USER 'joelle'@'%.brab.net' IDENTIFIED BY 'singingisfun'; 9. 10. -- hannah peut se connecter partir de n'importe quel hte 11. CREATE USER 'hannah'@'%' IDENTIFIED BY 'looking4sun';

Renommer l'utilisateur
1. RENAME USER 'max'@'localhost' TO 'maxime'@'localhost';

Mot de passe
1. SET PASSWORD FOR 'thibault'@'194.28.12.%' = PASSWORD('basket8');

Les diffrents privileges


Les privilges SELECT, INSERT, UPDATE et DELETE

Privilges concernant les tables, les vues et les bases de donnes


Privilge CREATE TABLE Cration de tables Action autorise

CREATE TEMPORARY TABLE Cration de tables temporaires CREATE VIEW Cration de vues (il faut galement avoir le privilge SELECT sur les colonnes slectionnes par la vue)

Privilge ALTER DROP

Action autorise Modification de tables (avec ALTER TABLE) Suppression de tables, vues et bases de donnes

Autres privilges
Privilge Action autorise

CREATE ROUTINE Cration de procdures stockes (et de fonctions stockes - non couvert dans ce cours) ALTER ROUTINE EXECUTE INDEX TRIGGER LOCK TABLES CREATE USER Modification et suppression de procdures stockes (et fonctions stockes) Excution de procdures stockes (et fonctions stockes) Cration et suppression d'index Cration et suppression de triggers Verrouillage de tables (sur lesquelles on a le privilge SELECT) Gestion d'utilisateur (commandes CREATE USER, DROP USER, RENAME USER et SET PASSWORD)

Niveaux d'application des privilges


Niveau *.* Application du privilge Privilge global : s'applique toutes les bases de donnes, tous les objets. Un privilge de ce niveau sera stock dans la table mysql.user. Si aucune base de donnes n'a t pralablement slectionne (avec USE nom_bdd), c'est l'quivalent de *.* (privilge stock dans mysql.user). Sinon, le privilge s'appliquera tous les objets de la base de donnes qu'on utilise (et sera stock dans la table mysql.db). Privilge de base de donnes : s'applique tous les objets de la base nom_bdd (stock dans mysql.db). Privilge de table (stock dans mysql.tables_priv). Privilge de table : s'applique la table nom_table de la base de donnes dans laquelle on se trouve, slectionne au pralable avec USE nom_bdd (stock dans mysql.tables_priv). S'applique la procdure (ou fonction) stocke nom_bdd.nom_routine (privilge stock dans mysql.procs_priv).

nom_bdd.* nom_bdd.nom_table nom_table nom_bdd.nom_routine

Ajout de privilges
1. GRANT privilege [(liste_colonnes)] [, privilege [(liste_colonnes)], ...] 2. ON [type_objet] niveau_privilege 3. TO utilisateur [IDENTIFIED BY mot_de_passe]; privilege : le privilge accorder l'utilisateur (SELECT, CREATE VIEW, EXECUTE,) ; (liste_colonnes) : facultatif - liste des colonnes auxquelles le privilge s'applique ; niveau_privilege : niveau auquel le privilge s'applique (*.*, nom_bdd.nom_table,) ; type_objet : en cas de noms ambigus, il est possible de prciser quoi se rapporte le niveau : TABLE ou PROCEDURE.

Rvocation de privilges
REVOKE privilege [, privilege, ...] ON niveau_privilege FROM utilisateur;

Privilges particuliers
1. GRANT ALL Tous les privilges 2. ON elevage.Client 3. TO 'john'@'localhost'; 1. GRANT USAGE -- signifie "aucun privilge", mais dans ce cas on modifie le mot de passe de 'john'@'localhost'. Ses privilges ne changent pas. 2. ON *.* 3. TO 'john'@'localhost' IDENTIFIED BY 'test2012usage'; Pour accorder des privilges d'autres utilisateurs, on peut accorder GRANT OPTION de deux manires : comme un privilge normal, aprs le mot GRANT ; la fin de la commande GRANT, avec la clause WITH GRANT OPTION.

1. GRANT SELECT, UPDATE, INSERT, DELETE, GRANT OPTION 2. ON elevage.* 3. TO 'joseph'@'localhost' IDENTIFIED BY 'ploc4';

OU
4. 5. 6. 7. GRANT SELECT, UPDATE, INSERT, DELETE ON elevage.* TO 'joseph'@'localhost' IDENTIFIED BY 'ploc4' WITH GRANT OPTION;