Vous êtes sur la page 1sur 74

Bases de donnes et Internet

Facult des Sciences et Techniques Fs Dpartement de Gnie Industriel Master Sciences et Techniques en Gnie Industriel Professeur : F. Kaghat

Introduction SQL et MySQL

Introduction

SQL : Structured Query Language (langage structur de requtes) est un langage de requte vers les bases de donnes exploitant le modle relationnel. Chaque SGBD important utilise SQL, et MySQL ne fait pas exception la rgle. SQL a t cr au dbut des annes 70 daprs la thorie des bases de donnes relationnelles, labore par E. F. Godd. Le serveur de base de donnes MySQL est trs souvent utilis avec le langage de cration de pages web dynamiques : PHP.
Dpartement de Gnie Industriel 3

Sommaire

Conception dune table Le moniteur mysql Cration de bases de donnes et de tables Insertion denregistrements Slection de donnes Affichages conditionnels LIKE et NOT LIKE Tri des rsultats de recherche Limitation du nombre de rsultats affichs Mise jour des donnes Suppression denregistrements
Dpartement de Gnie Industriel 4

Conception dune table

Conception dune table


On va crer une base de donnes quon appellera ma_base et dans laquelle seront conserves des informations concernant des enregistrements dutilisateurs. Elle contiendra une unique table, utilisateurs, compose de plusieurs colonnes destines conserver lidentificateur personnel de lutilisateur, son nom, son prnom, son adresse e-mail, son mot de passe et la date laquelle il sest enregistr. Le nom des colonnes respecte les rgles de grammaire de SQL : noms alphanumriques sans espace avec le blanc soulign (_) possible.
Dpartement de Gnie Industriel 6

Conception dune table


Nom de la colonne id-utilisateur prnom nom email mot_de_passe date_enreg Exemple 834 Dupont Pierre p.dupont@monserveur.com 56hf228 2003-05-13 17:03:24
Dpartement de Gnie Industriel 7

Conception dune table

Il faut dterminer le type de donnes de chacun des champs qui seront utiliss car il faudra lindiquer lors de la cration de la structure de la base. Pour tout SGBD, il existe 3 catgories principales de donnes: Texte; Nombres; Dates et heures. A lintrieur de chacune de ces catgories, il existe plusieurs variantes, certaines propres MySQL. Le choix de la catgorie la plus approprie a un impact non seulement sur le type des informations pouvant tre conserv mais aussi sur les performances dexploitation ultrieures. Dpartement de Gnie Industriel 8

Types de donnes MySQL Entiers


nom borne infrieure -128 0 borne suprieure 127 255

TINYINT TINYINT UNSIGNED

SMALLINT
SMALLINT UNSIGNED MEDIUMINT MEDIUMINT UNSIGNED INT* INT* UNSIGNED BIGINT

-32768
0 -8388608 0 -2147483648 0 -9223372036854775808

32767
65535 8388607 16777215 2147483647 4294967295 9223372036854775807

BIGINT UNSIGNED
(*) : INTEGER est un synonyme de INT

18446744073709551615
9

Dpartement de Gnie Industriel

Types de donnes MySQL Flottants

Les flottants dits aussi nombres rels sont des nombres virgule. Contrairement aux entiers, leur domaine nest pas continu du fait de limpossibilit de les reprsenter avec une prcision absolue.
nom domaine ngatif : borne infrieure borne suprieure
-3.402823466E+38 -1.175494351E-38 -1.7976931348623157E+308 -2.2250738585072014E-308

Domaine positif : borne infrieure borne suprieure


1.175494351E-38 3.402823466E+38 2.2250738585072014E-308 1.7976931348623157E+308
10

FLOAT DOUBLE*

(*) : REAL est un synonyme de DOUBLE.

Dpartement de Gnie Industriel

Types de donnes MySQL Chanes (1)


nom CHAR(M) longueur Chane de taille fixe M, o 1<M<255, complte avec des espaces si ncessaire.

CHAR(M) BINARY
VARCHAR(M)

Idem, mais insensible la casse lors des tris et recherches.


Chane de taille variable, de taille maximum M, o 1<M<255, complt avec des espaces si ncessaire. Idem, mais insensible la casse lors des tris et recherches.

VARCHAR(M) BINARY

Dpartement de Gnie Industriel

11

Types de donnes MySQL Chanes (2)


nom TINYTEXT TEXT MEDIUMTEXT LONGTEXT DECIMAL(M,D)* longueur Longueur maximale de 255 caractres. Longueur maximale de 65535 caractres. Longueur maximale de 16777215 caractres. Longueur maximale de 4294967295 caractres. Simule un nombre flottant de D chiffres aprs la virgule et de M chiffres au maximum. Chaque chiffre ainsi que la virgule et le signe moins (pas le plus) occupe un caractre.

(*) : NUMERIC est un synonyme de DECIMAL.


Dpartement de Gnie Industriel 12

Types de donnes MySQL Chanes (3)

Les types TINYTEXT, TEXT, MEDIUMTEXT et LONGTEXT peuvent tre judicieusement remplacs respectivement par TINYBLOB, BLOB, MEDIUMBLOB et LONGBLOB. Ils ne diffrent que par la sensibilit la casse qui caractrise la famille des BLOB. Alors que la famille des TEXT sont insensibles la casse lors des tris et recherches. Les BLOB peuvent tre utiliss pour stocker des donnes binaires. Les VARCHAR, TEXT et BLOB sont de taille variable. Alors que les CHAR et DECIMAL sont de taille fixe.
Dpartement de Gnie Industriel 13

Types de donnes MySQL Dates et heures (1)


nom DATE DATETIME TIMESTAMP TIMESTAMP(M) TIME YEAR description Date au format anglophone AAAA-MM-JJ. Date et heure au format anglophone AAAA-MM-JJ HH:MM:SS. Affiche la date et lheure sans sparateur : AAAAMMJJHHMMSS. Idem mais M vaut un entier pair entre 2 et 14. Affiche les M premiers caractres de TIMESTAMP. Heure au format HH:MM:SS. Anne au format AAAA.
Dpartement de Gnie Industriel 14

Types de donnes MySQL Dates et heures (2)


nom TIMESTAMP(2) TIMESTAMP(4) TIMESTAMP(6) TIMESTAMP(8) AA AAMM AAMMJJ AAAAMMJJ description En cas dinsertion dun enregistrement en laissant vide un attribut de type TIMESTAMP, celui-ci prendra automatiquement la date et heure de linsertion. Contrairement Unix (o le timestamp est le nombre de secondes coules depuis le 1er janvier 1970), en MySQL, il est une chane de format comme indiqu ci-contre.
15

TIMESTAMP(10) TIMESTAMP(12)
TIMESTAMP(14)

AAMMJJHHMM AAMMJJHHMMSS
AAAAMMJJHHMMSS

Dpartement de Gnie Industriel

Types de donnes MySQL numrations


Un attribut de type ENUM peut prendre une valeur parmi celles dfinies lors de la cration de la table plus la chane vide ainsi que NULL si la dfinition le permet. Ces valeurs sont exclusivement des chanes de caractres. Une numration peut contenir 65535 lments au maximum. Dfinition dun tel attribut : nom_attribut ENUM(valeur 1,valeur 2) nom_attribut ENUM(valeur 1,valeur 2) NULL
Dpartement de Gnie Industriel 16

Types de donnes MySQL numrations


A chaque valeur est associe un index allant de 0 N si N valeurs ont t dfinies. Lindex 0 est associ la chane nulle, lindex 1 la premire valeur Lindex NULL est associ la valeur NULL.
Si une slection (SELECT ou WHERE) est faite dans un contexte numrique, lindex est renvoy. Sinon, cest la valeur qui est retourne. Il peut tre dfini jusqu 65535 valeurs distinctes insensibles la casse.
Dpartement de Gnie Industriel 17

Types de donnes MySQL Ensembles


Un attribut de type SET peut prendre pour valeur la chane vide, NULL ou une chane contenant une liste de valeurs qui doivent tre dclares lors de la dfinition de lattribut lors de la cration de la relation. Par exemple, un attribut dclar comme ci : SET(voiture, moto, vlo) NOT NULL peut prendre les valeurs suivantes : (chane vide) voiture,moto vlo,voiture,moto et autres combinaisons de listes des trois valeurs dfinie plus haut. Dpartement de Gnie Industriel

18

Types de donnes MySQL Ensembles


Un attribut dclar comme suit : SET(voiture, moto, vlo) NULL peut prendre, en plus ce celles prcdentes, la valeur NULL.

Il ne peut tre dfini que 64 lments maximum.

Dpartement de Gnie Industriel

19

Remarques

Les types ENUM et SET sont ne extension de MySQL et nexistent donc pas dans tous les SGBD. Leur emploi limite donc la potabilit dune base de donnes. Lorsquon place une chane de caractres de cinq caractres dans un champ char (2), les trois derniers caractres sont perdus. Cest la mme chose pour tous les champs dont la longueur est dfinie lavance.

Dpartement de Gnie Industriel

20

Conception dune table


Nom de la colonne Type

Dcider du type de donner que contiendra une colonne (tape facile et vidente)

id-utilisateur prnom nom email mot_de_passe date_enreg


Dpartement de Gnie Industriel

nombre texte texte texte texte date


21

Types de donnes gnriques de la table utilisateurs

Conception dune table

Les nombres (les codes postaux, les prix, ) seront des zones de texte si on choisit de les conserver avec leur ponctuation (caractre euro, tirets, espace), mais on obtiendra de meilleures performances si on les conserve sous forme numrique (on les mettra en forme au moment de leur utilisation). Notre exemple :

Le champ id_utilisateur (qui est numrique) sera un MEDIUMINT (environ 17 millions de valeurs sous forme non signe). La date denregistrement (date_enreg) sera un DATETIME (conserver la date et lheure). Les autres champs seront le plus souvent des VARCHAR puisque leur longueur peut varier dun enregistrement lautre. Le mot de passe sera une chane de caractres de longueur fixe.
Dpartement de Gnie Industriel 22

Conception dune table


Nom de la colonne id-utilisateur prnom nom email mot_de_passe date_enreg Type MEDIUMINT VARCHAR VARCHAR VARCHAR CHAR DATETIME
Dpartement de Gnie Industriel 23

Types de donnes MySQL de la table utilisateurs

Conception dune table

Dfinir la longueur des zones de texte et des colonnes devant contenir des nombres ainsi que les autres attributs (UNSIGNED ou NOT NULL par exemple). La taille dun champ doit tre choisie la plus petite possible daprs la plus grande valeur quon prvoit dy conserver. Par exp. si le champ id_utilisateur na que 3 chiffres : dfinir la colonne qui le recevra comme un SMALLINT, (ce qui permet de loger 999 utilisateurs). Il sera videmment du type non sign . Dans notre exemple : tous les champs doivent tre renseigns (ils ne peuvent pas avoir la valeur NULL), sauf en ce qui concerne ladresse e-mail.
Dpartement de Gnie Industriel 24

Conception dune table


Nom de la colonne id-utilisateur prnom nom Type MEDIUMINT UNSIGNED NOT NULL VARCHAR (15) NOT NULL VARCHAR (30) NOT NULL

email
mot_de_passe

VARCHAR (40)
CHAR (16) NOT NULL

date_enreg

DATETIME NOT NULL


Dfinitions finales de la table utilisateurs
Dpartement de Gnie Industriel 25

Le moniteur mysql

Le moniteur mysql

A part lusage de PHP, la faon la plus courante dadresser la serveur MySQL est de passer par le client mysql (aussi appel le moniteur mysql). Avec lui, il est possible de se connecter mysqld (la vritable application, qui contrle les bases de donnes) sur la mme machine ou sur une autre. Il ne faut pas confondre mysql avec MySQL, lequel est le systme de bases de donnes considr dans son ensemble. Sous Windows : on accde au client mysql au moyen dune fentre DOS. Sous Mac OS X ou Linux : Utiliser lapplication Terminal pour cela.
Dpartement de Gnie Industriel 27

Le moniteur mysql
Le client mysql utilise plusieurs arguments parmi lesquels le nom dutilisateur, le mot de passe et le nom de lordinateur hte : Mysql -u nom_d_utilisateur -p -h ordinateur_hte Prsence de loption -p : mysql demandera le mot de passe. Mais on peut spcifier ce dernier sur la ligne de commande en le tapant immdiatement aprs -p. Cette procdure est moins scurise car tout le monde pourra ainsi le voir. Sous mysqld, chaque commande MySQL doit se terminer par un point-virgule (;). On peut donc poursuivre la frappe dune mme commande sur plusieurs lignes conscutives.

Dpartement de Gnie Industriel 28

Le moniteur mysql
Fonctionnement en ligne de commande (sous Windows): 1. On se place dans le rpertoire o rside mysql : cd program files\easyphp\mysql\bin cd program files\easyPHP-5.3.3\mysql\bin Il ne faut pas terminer la ligne par un (;) : nous ne sommes pas encore sous mysql. 2. mysql -u root -p linvite de mysql saffiche. A partir de maintenant, on devra terminer les commandes par un (;). 3. Slection dune base de donnes (une base de donnes dessai test, prsente avec EasyPHP : Dpartement de Gnie USE test; mysql rpond en affichant Industriel : Database changed. 29

Le moniteur mysql
4. Quitter mysql : exit; mysql rpond en affichant : Bye. Pour quitter mysql : exit; = quit; Si on connat davance le nom de la base de donnes on peut utiliser (pour accder, par exp., la base de donnes test) : mysql -u root test Connatre la liste des commandes reconnues par mysql : mysql --help; Lorsquon envoie des commandes mysql au moyen dun script, les commandes qui sy trouvent ne doivent pas tre termines par un (;).
Dpartement de Gnie Industriel 30

Cration de bases de donnes et de tables

Cration de bases de donnes et de tables


Crer une base de donnes : CREATE DATABASE nom_de_la_base; CREATE est aussi utilis pour crer une table : CREATE TABLE nom_de_la_table (description_co_1, description_co_2, ); Une fois la table cre, il faut dfinir sa structure, colonne par colonne. On peut dcider de crer des index ce moment-l ou de le faire plus tard.

Dpartement de Gnie Industriel

32

Cration de bases de donnes et de tables


1. Lancement d moniteur mysql : mysql -u root -p 2. Cration et slection dune nouvelle base de donnes : CREATE DATABASE ma_base; USE ma_base; 3. Cration de la table utilisateurs : CREATE TABLE utilisateurs ( id_utilisateur MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, prenom VARCHAR(15) NOT NULL, nom VARCHAR(30) NOT NULL, email VARCHAR(40), mot_de_passe CHAR(16) NOT NULL, date_enreg DATETIME NOT NULL, PRIMARY KEY (id_utilisateur) ); Dpartement de Gnie Industriel

33

Cration de bases de donnes et de tables

Lordre dans lequel ces colonnes figurent dans la dclaration dtermine lordre dans lequel elles seront implantes dans la base de donnes. 4. Vrifier que la table a bien t cre et vrifier la structure de la table utilisateurs au moyen des commandes SHOW :

SHOW TABLES; SHOW COLUMNS FROM utilisateurs;

Bien que MySQL soit insensible la casse, on a pris lhabitude dcrire en majuscules les noms des commandes MySQL, ce qui permet de les sparer visuellement des noms de bases de donnes, tables et colonnes. A la place de la commande SHOW COLUMNS FROM, on peut crire: DESCRIBE.
Dpartement de Gnie Industriel 34

Insertion denregistrements

Insertion denregistrements

Il existe deux formats pour enregistrer des valeurs dans une table : 1. On spcifie une une les colonnes garnir et les valeurs y placer :

INSERT INTO nom_base (col1, col2, ) VALUES (val1, val2, ); INSERT INTO nom_base (col4, col8, ) VALUES (val4, val8, );

Cette mthode nous permet de ne saisir que les valeurs non nulles. Les autres se verront automatiquement affecter la valeur NULL ou toute autre valeur qui aurait pu tre spcifie. Si parmi ces colonnes lune dentre elles a lattribut NOT NULL, une erreur sera signale.
Dpartement de Gnie Industriel

36

Insertion denregistrements
2. Saisir autant de valeurs quil y a de colonnes garnir: INSERT INTO nom_base VALUES (val1, val2, NULL, , valn); Il faut que toutes les valeurs soient spcifies , mme si certaines ont la valeur NULL. Sil ny a pas exactement autant de valeurs quil existe de colonnes, une erreur sera signale. On peut affecter des valeurs plusieurs lignes la fois : INSERT INTO nom_base (col1, col2, ) VALUES (val1, val2, ) VALUES (valA, valB, ) VALUES (valx, valy, ); Cette mthode nest pas standard. Elle ne doit pas tre employe avec dautres SGBD que MySQL.

Dpartement de Gnie Industriel

37

Insertion denregistrements
Deux fonctions MySQL: La fonction PASSWORD() : chiffrer les mots de passe qui permettent daccder MySQL. Elle cre une chane de caractres qui a exactement 16 caractres (cest la raison du choix de CHAR (16) dans la table utilisateurs). Lalgorithme de chiffrement est irrversible, c--d quen partant du mot de passe chiffr il ny a aucun moyen de retrouver le mot de passe original. La fonction NOW() : insre un groupe date-heure correspondant au moment de linsertion dans le champ o elle est appele. Il ne faut pas placer une fonction de MySQL entre apostrophes ou entre guillemets. Il ne doit pas y avoir despace entre la parenthse ouvrante et le dernier caractre du nom de la fonction.
Dpartement de Gnie Industriel 38

Insrer des donnes dans une table


1. Sous mysql, pour insrer une nouvelle ligne de donnes dans la table utilisateurs, on utilise lune des 2 commandes suivantes : INSERT INTO utilisateurs (prenom, nom, email, mot_de_passe, date_enreg) Values ('Jules', 'Cesar', 'j.cesar@roma.org', PASSWORD('motpasse'), NOW()); INSERT INTO utilisateurs VALUES ('Jules', 'Cesar', 'j.cesar@roma.org', PASSWORD('motpasse'), NOW()); En ne donnant aucune valeur au champ id_utilisateur (premire forme) ou en lui donnant la valeur NULL, MySQL va lui attribuer la valeur immdiatement suprieure la dernire utilise.

Dpartement de Gnie Industriel

39

Insrer des donnes dans une table


2. Insrons plusieurs valeurs dans la table utilisateurs : INSERT INTO utilisateurs (prenom, nom, email, mot_de_passe, date_enreg) Values ('John', 'Lennon', 'john@beatles.com', PASSWORD('Happiness'), NOW()), ('Paul', 'McCartney', 'paul@beatles.com', PASSWORD('LetItBe'), NOW()), ('George', 'Harrison', 'george@beatles.com', PASSWORD('something'), NOW()), ('Ringo', 'Starr', 'ringo@beatles.com', PASSWORD('thisboy'), NOW());

Dpartement de Gnie Industriel

40

Insrer des donnes dans une table


Plusieurs lignes de texte taper risque derreurs. Autre moyen plus sr et rapide de procder : crer un script contenant les commandes excuter. On peut enregistrer ce script sous forme de fichier texte (extension .txt). On le place dans un rpertoire qui nous convient, par exp. \program files\easyphp\mysql\data (existe dj). 3. On saisie dans un diteur de texte la mme commande que la prcdente lexception du pointvirgule final, qui nest pas ncessaire lorsque la commande se trouve dans un script.
Dpartement de Gnie Industriel

41

Insrer des donnes dans une table


beatles.txt dans le rpertoire \program files\easyphp\mysql\data : INSERT INTO utilisateurs (prenom, nom, email, mot_de_passe, date_enreg) Values ('John', 'Lennon', 'john@beatles.com', PASSWORD('Happiness'), NOW()), ('Paul', 'McCartney', 'paul@beatles.com', PASSWORD('LetItBe'), NOW()), ('George', 'Harrison', 'george@beatles.com', PASSWORD('something'), NOW()), ('Ringo', 'Starr', 'ringo@beatles.com', PASSWORD('thisboy'), NOW()) 4. On quitte mysql : quit;

Dpartement de Gnie Industriel

42

Insrer des donnes dans une table


5. La commande taper dans la fentre DOS : mysql -u root -D utilisateurs <..\data\beatles.txt Le symbole "<" est un caractre de redirection qui indique que les commandes adresses mysql doivent tre lues dans le fichier dont le nom suit. Aucun accus de rception nest affich, on retrouve simplement linvite de commande. Mais sil y a une erreur dans la commande, on verra safficher un message derreur.

Dpartement de Gnie Industriel 43

Remarques
Pour insrer une valeur contenant une apostrophe ou un guillemet, on doit lchapper avec un antislash : INSERT INTO utilisateurs (prenom, nom) VALUES ('Patrick', 'O\'Maley'); MySQL supprimera automatiquement les espaces terminaux dune valeur insrer dans un champ de type VARCHAR. Dans les versions actuelles de MySQL, le terme INTO qui intervient dans la commande INSERT est facultatif. En gnral, on place les chanes de caractres entre apostrophes et les nombres entre apostrophes ou entre guillemets. Ceci est valable pour toutes les commandes et pas seulement pour INSERT.

Dpartement de Gnie Industriel

44

Slection des donnes

Slection des donnes


La commande MySQL SELECT : SELECT quelles_colonnes FROM quelle_table; Voir lensemble des valeurs de la table utilisateurs : SELECT * FROM utilisateurs; * Signifie tout . Pour un affichage partiel, on peut crire par exp. : SELECT id_utilisateur, prenom, nom FROM utilisateurs; On peut afficher les colonnes dune table dans un ordre diffrent de leur ordre naturel. Les colonnes seront affiches dans lordre o nous les numrons dans la commande SELECT.

Dpartement de Gnie Industriel

46

Affichages conditionnels

Affichages conditionnels

On ajoute une condition daffichage avec la clause WHERE (o) :

SELECT * FROM utilisateurs WHERE nom='Mozart'; SELECT email FROM utilisateurs WHERE prenom='John'; SELECT nom FROM habitants WHERE naissance='2000-01-01';

Les oprateurs les plus couramment utiliss avec une commande SELECT : (ils peuvent tre associs dans des expressions parentses pour permettre une slection plus fouille).
Dpartement de Gnie Industriel 48

Oprateurs MySQL (1)


Oprateur = < > <= >= != Signification galit infrieur suprieur infrieur ou gal suprieur ou gal diffrent de
Dpartement de Gnie Industriel 49

Oprateurs MySQL (2)


Oprateur IS NOT NULL IS NULL BETWEEN OR (ou ||) AND (ou &&) NOT (ou !) Signification a une valeur na aucune valeur entre deux valeurs si une des deux conditions est vrifie si les deux conditions sont vrifies lorsque la condition nest pas vrifie
Dpartement de Gnie Industriel 50

NOT BEETWEEN lextrieur de deux valeurs

Exemples
SELECT * FROM utilisateurs WHERE (id_utilisateur>=33) AND (id_utilisateur<=50); SELECT * FROM utilisateurs WHERE (nom='Mozart') OR (nom='Mozar'); La liste des utilisateurs qui se sont enregistrs partir de six heures du matin et avant sept heures du matin le 22 juillet 2003 : SELECT * FROM utilisateurs WHERE (date_enreg > '2011-04-21 16:10:00') AND (date_enreg < '2011-04-22 16:13:59'); On peut aussi utiliser la clause BETWEEN.
Dpartement de Gnie Industriel

51

Exemples

Slection des noms des utilisateurs dont le prnom est Frantz: Slection des noms des utilisateurs qui nont pas dadresse e-mail:

SELECT nom FROM utilisateurs WHERE prenom='Frantz';

SELECT * FROM utilisateurs WHERE email IS NULL; ou SELECT * FROM utilisateurs WHERE email =''; Slection de lutilisateur dont le mot de passe est "sonate" : les mots de passe ont t stocks aprs avoir t chiffrs avec la fonction PASSWORD(), il suffit de comparer "sonate" avec le rsultat du chiffrement de ce mot par cette fonction : SELECT * FROM utilisateurs WHERE mot_de_passe=PASSWORD('sonate');
Dpartement de Gnie Industriel 52

Remarques
On peut galement utiliser les oprateurs IN et NOT IN pour savoir si une valeur de champ est ou nest pas dans une liste de valeurs : SELECT * FROM habitants WHERE naissance IN ('2000-01-01', '2001-01-01', '2002-01-01'); On peut faire des calculs lintrieur de notre critre de recherche au moyen des 4 oprateurs usuels. Nous retrouverons, plus loin dans ce chap., les oprateurs de conditions dans dautres emplois quavec une clause SELECT.

Dpartement de Gnie Industriel 53

LIKE et NOT LIKE

LIKE et NOT LIKE

Supposons quon recherche quelquun dont le nom peut tre Dupont, Dupond, Dupontel ou Duponk-joly. Cest l quinterviennent les clauses LIKE et NOT LIKE associes aux 2 caractres jokers "_" et "%". "_" correspond nimporte quel caractre unique, A "%" correspond aucun, un ou plusieurs caractres.
SELECT * FROM utilisateurs WHERE nom LIKE 'Dupon%';

tous les noms commenant par "Dupon". Slectionnons tous les enregistrements o le prnom commence par "Joh". La recherche tant insensible la casse trouverait aussi les prnoms commenant par "joh".
SELECT * FROM utilisateurs WHERE prenom LIKE 'Joh%';
Dpartement de Gnie Industriel 55

LIKE et NOT LIKE

Slectionnons les utilisateurs (nom, prnom) dont ladresse e-mail nest pas de la forme xxx@menara.ma :

SELECT nom, prenom FROM utilisateurs WHERE email NOT LIKE '%@menara.ma';

Les caractres jokers peuvent tre utiliss au dbut et/ou la fin dune chane de caractre : SELECT * FROM utilisateurs WHERE nom LIKE '_upon%'; Bien que LIKE et NOT LIKE soient normalement utilises avec des chanes de caractres, elles peuvent aussi sappliquer des champs numriques.

Dpartement de Gnie Industriel 56

LIKE et NOT LIKE

Pour utiliser un caractre "_" et "%" dans une condition de recherche avec LIKE ou NOT LIKE, il faut lchapper avec un antislash. Le caractre joker "_" peut sassocier lui-mme. LIKE '__' recherchera toue combinaison de deux caractres.

Dpartement de Gnie Industriel

57

Tri des rsultats de recherche

Tri des rsultats de recherche

La clause ORDER BY modifie la prsentation des rsultats, par exemple en les triant sur un champ donn dans un certain ordre. Lorsquon ne prcise rien, les rsultas sont prsents dans un ordre imprvisible (probablement dans lordre croissant des cls primaires). SELECT * FROM utilisateurs ORDER BY prenom; SELECT email FROM utilisateurs ORDER BY date_enreg; Par dfaut, le sens du tri effectu par la clause ORDER BY est le sens ascendant (abrg en ASC). Les nombres iront en croissant et les dates, du plus ancien au plus rcent. On peut inverser le sens du tri au moyen de la clause DESC (descendant).
Dpartement de Gnie Industriel 59

Tri des rsultats de recherche

Slectionner tous les utilisateurs sur leur nom, par ordre alphabtique : Afficher par ordre alphabtique les champs nom, prnom (dans cet ordre) pour tous les utilisateurs : Afficher tous les utilisateurs par date denregistrement (le plus rcent en tte) :

SELECT prenom, nom FROM utilisateurs ORDER BY nom;

SELECT prenom, nom FROM utilisateurs ORDER BY nom ASC, prenom ASC;

SELECT * FROM utilisateurs ORDER BY date_enreg DESC;

Dpartement de Gnie Industriel

60

Limitation du nombre de rsultats affichs

Limitation du nombre de rsultats affichs


La clause LIMIT permet de limiter le nombre de rsultats quaffichera MySQL. SELECT * FROM utilisateurs LIMIT 10; Seuls les 10 Premiers rsultats seront affichs. SELECT * FROM utilisateurs LIMIT 10, 20; 20 enregistrements seront affichs en commenant par le onzime. On peut utiliser LIMIT en mme temps que WHERE et/ou ORDR BY en lajoutant la fin de la requte : SELECT * FROM utilisateurs WHERE prenom='Frantz ORDER BY date_enreg DESC LIMIT 5;

Dpartement de Gnie Industriel

62

Limitation du nombre de rsultats affichs

SELECT * FROM utilisateurs ORDER BY date_enreg DESC LIMIT 5;

Slectionner les 5 derniers utilisateurs enregistrs :

SELECT * FROM utilisateurs ORDER BY date_enreg ASC LIMIT 1, 1;

Slectionner la deuxime personne qui sest enregistre:

(Les lignes sont numrotes partir de 0) La clause LIMIT x, y est la plus frquemment utilise lorsquon veut afficher plusieurs pages de rsultats par tranches de 20 (ou toute autre valeur). La clause LIMIT ne fait pas partie du standard SQL et nest donc pas disponible sur tous les SGBD. La clause LIMIT peut tre prsente dans dautres commandes MySQL et pas seulement dans SELECT.
Dpartement de Gnie Industriel

63

Mise jour des donnes

Mise jour des donnes


On a toujours la possibilit de modifier les enregistrements dj prsents dans une table (corriger une erreur de saisie initiale). Commande de mise jour : UPDATE nom_de_la_table SET champ='valeur'; On peut modifier en mme temps plusieurs champs dun enregistrement en les sparant par des virgules :

UPDATE nom_de_la_table SET champ1='valeur1', champ2='valeur2', ;

On utilisera une clause WHERE pour slectionner la ligne de la table sur laquelle porteront les modifications. Sinon ces modifications seraient apportes toutes les lignes. Exp. :
Dpartement de Gnie Industriel 65

UPDATE nom_de_la_table SET champ1='valeur1' WHERE champ2='valeur2';

Mise jour des donnes

Comme les suppressions, les mises jour sont lune des plus importantes raisons dutiliser une cl primaire. (cette valeur qui ne devrait jamais changer) peut construire un point de rfrence dans les clauses WHERE mme si chacun des autres champs doit tre modifi. Exemple : On veut modifier ladresse e-mail dun utilisateur (prnom : Fantz nom : Liszt). On commence donc par dterminer la cl primaire de lenregistrement qui mintresse ( modifier) :

SELECT id_utilisateur FROM utilisateurs WHERE prenom='Fantz' AND nom='Liszt';


MySQL affiche pour id_utilisateur : 15
Dpartement de Gnie Industriel 66

Mise jour des donnes


La mise jour de cet enregistrement : UPDATE utilisateurs SET email='fran@hungary.net' WHERE id_utilisateur=15; MySQL va afficher des informations sur la faon dont sest droule la commande et sur le nombre denregistrements affects. Vrifier que la mise jour a bien t effectue : SELECT * FROM utilisateurs WHERE id_utilisateur=15;

Dpartement de Gnie Industriel

67

Remarques

Utilisons toujours une clause WHERE pour faire une mise jour, sauf si nous voulons modifier tous les enregistrements de la table. Pour se protger contre une mise jour accidentelle dun trop grand nombre denregistrements, on peut ajouter une clause LIMIT. On ne doit jamais modifier le champ qui contient la cl primaire car cela pourrait compromettre lintgrit des relations avec une autre table.
Dpartement de Gnie Industriel 68

Suppression denregistrements

Suppression denregistrements
On peut supprimer des enregistrements dune table au moyen de la commande DELETE : DELETE FROM nom_de_la_table WHERE champ='valeur'; Une fois supprim, un enregistrement est perdu sans espoir de rcupration. Par prudence, on peut faire une copie de la table avant toute suppression. Il est fortement recommand de faire figurer une clause WHERE dans la commande de suppression. La requte DELETE FROM nom_de_la_table supprimera tout le contenu dune table mais laissera intacte sa structure.

Dpartement de Gnie Industriel 70

Suppression denregistrements
La commande TRUNCATE TABLE nom_de_la_table supprimera la totalit de la table ainsi que sa structure mais recrera cette dernire. Le rsultat est identique, mais cette mthode, inspire du SGBD Oracle, est plus rapide et plus sr. Exemple de suppression de donnes : Dterminons dabord la valeur du champ id_utilisateur (cl primaire) de lenregistrement supprimer : SELECT id_utilisateur FROM utilisateurs WHERE prenom='Claudio' AND nom='Monteverdi'; MySQL affiche pour id_utilisateur : 14

Dpartement de Gnie Industriel 71

Suppression denregistrements
Vrifions ensuite quil sagit bien de lenregistrement que nous voulons supprimer : SELECT * FROM utilisateurs WHERE id_utilisateur=14; Excutons la requte de suppression : DELETE FROM utilisateurs WHERE id_utilisateur=14; Comme pour UPDATE, MySQL affiche un compte rendu dexcution. Lenregistrement qui vient dtre supprim nest plus rcuprable. On peut vrifier la bonne excution de la prcdente requte: SELECT id_utilisateur, prenom, nom FROM utilisateurs ORDER BY id_utilisateur ASC;

Dpartement de Gnie Industriel

72

Suppression denregistrements
On voit que lenregistrement supprim napparat plus

dans la liste des lments de la table. Remarques : Pour supprimer toutes les donnes dune table ainsi que la table elle-mme : DROP TABLE nom_de_la_table; Pour supprimer une base de donnes dans sa totalit (donc ainsi que toutes les tables quelle contient) : DROP DATABASE nom_de_la_base; Depuis MySQL 4.0 on peut lancer une requte DELETE sur plusieurs tables en mme temps.
Dpartement de Gnie Industriel 73

Suppression denregistrements
Pour des raisons de scurit, on peut ajouter une clause LIMIT toute requte de suppression de faon en limiter la porte. On ne doit le faire que si on connat ce nombre lavance : DELETE FROM nom_de_la_table WHERE id=4 LIMIT 1;

Dpartement de Gnie Industriel

74