Vous êtes sur la page 1sur 105

MySQL

pour booster votre site web PHP

Hugo Etivant

Dernire mise jour : 20 juillet 2003

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

Introduction
MySQL drive directement de SQL (Structured Query Language) qui est un
langage de requte vers les bases de donnes exploitant le modle
relationnel.
Il en reprend la syntaxe mais nen conserve pas toute la puissance puisque de
nombreuses fonctionnalits de SQL napparaissent pas dans MySQL
(slections imbriques, cls trangres)
Le serveur de base de donnes MySQL est trs souvent utilis avec le
langage de cration de pages web dynamiques : PHP. Il sera discut ici des
commandes MySQL utilisables via PHP dans les conditions typiques
dutilisation dans le cadre de la gestion dun site personnel hberg
gratuitement (par exemple sur Free.fr).

Base de
MySQL
donnes

Script
PHP

HTTP

Client

Serveur
Le CyberZode Qui Frtille

Page
HTML

http://cyberzoide.developpez.com

Sommaire

Thorie des bases de donnes relationnelles


Syntaxe de MySQL
Fonctions de MySQL
Interface avec PHP
Administration avec loutil phpMyAdmin

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

1
Le CyberZode Qui Frtille

Thorie des
bases de
donnes
http://cyberzoide.developpez.com

Concepts du modle relationnel


Avant dattaquer le vif du sujet, un petit glossaire du jargon des bases de
donnes :
Domaine : ensemble des valeurs dun attribut.
Relation : sous ensemble du produit cartsien dune liste de domaines. Cest
en fait un tableau deux dimensions dont les colonnes correspondent aux
domaines et dont les lignes contiennent des tuples. On associe un nom
chaque colonne.
Attribut : une colonne dune relation, caractris par un nom.
Tuple : liste des valeurs dune ligne dune relation.
Une relation est un peu une classe (programmation oriente objet) qui ne
possderait que des attributs et donc chaque instance reprsenterait un tuple.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

Les relations
Une relation est une table comportant des colonnes (appeles aussi attributs)
dont le nom et le type caractrisent le contenu qui sera insr dans la table.
Imaginons que lon veuille stocker dans notre base de donnes notre carnet
dadresses. On va donc crer la relation Personne qui aura pour attributs :
nom, prnom, adresse, tlphone. Autrement dit, cest une table nomme
Personne possdant les colonnes : nom, prnom, adresse, tlphone.
Les lignes que contiendra cette table seront appeles enregistrements ou
tuples.
Personnes
nom

prnom

adresse

tlphone

Dupond

Marc

8 rue de loctet

0123456789

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

Algbre relationnelle
Lalgbre relationnelle regroupe toutes les oprations possibles sur les
relations. Voici la liste des oprations possibles :
Projection : on ne slectionne quun ou plusieurs attributs dune relation (on
ignore les autres). Par exemple nafficher que les colonnes nom et prnom de
la table Personnes.
Jointure : on fabrique une nouvelle relation partir de 2 ou plusieurs autres en
prenant comme pivot 1 ou plusieurs attributs. Par exemple, on concatne la
table du carnet dadresse et celle des inscrits la bibliothque en fonction du
nom de famille (ces typiquement du recoupement de fichiers).
Slection : on slectionne tous les tuples ou bien seulement une partie en
fonction de critres de slection qui portent sur les valeurs des attributs. Par
exemple nafficher que les lignes de la table Personnes qui vrifient la
condition suivante : le nom ne commence pas par la lettre C.
Cette algbre est facilement possible avec les commandes de MySQL
(SELECT FROM WHERE).

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

Projection
Personnes
nom

prnom

adresse

tlphone

Martin

Pierre

7 alle des vers 0258941236

Dupond

Jean

32 all Poivrot

0526389152

Dupond

Marc

8 rue de loctet

0123456789

On projette la table
Personnes sur les
colonnes nom et prnom.

SELECT nom, prnom


FROM Personnes

Le CyberZode Qui Frtille

nom

prnom

Martin

Pierre

Dupond

Jean

Dupond

Marc

http://cyberzoide.developpez.com

Jointure
Bibliothque

Personnes
nom

Dernierlivre

7 alle des vers 0258941236

Dupond

Robinson

32 all Poivrot

Jospin

Faust

Martin

Misre

nom

prnom

adresse

Martin

Pierre

Dupond

Jean

tlphone
0526389152

On joint les deux tables, grce


la colonne nom.
SELECT Personnes.prnom, dernierlivre
FROM Personnes, Bibliothque
WHERE Personnes.nom = Bibliothque.nom

prnom

Dernierlivre

Jean

Robinson

Pierre

Misre

Le CyberZode Qui Frtille

Et on combine cette jointure


une projection sur les attributs
nom et dernierlivre.
Attention lever toute ambigut sur les noms dattribut
dans le cas o deux tables
possdent des colonnes de
mme nom.

http://cyberzoide.developpez.com

Slection
Personnes
nom

prnom

adresse

tlphone

Martin

Pierre

7 alle des vers 0258941236

Dupond

Jean

32 all Poivrot

0526389152

Dupond

Marc

8 rue de loctet

0123456789

SELECT *
FROM Personnes
WHERE nom = Dupond

Le CyberZode Qui Frtille

On ne slectionne que les


tuples dont lattribut nom
est gale Dupond.

nom

prnom

adresse

tlphone

Dupond

Jean

32 all Poivrot

0526389152

Dupond

Marc

8 rue de loctet

0123456789

http://cyberzoide.developpez.com

10

2
Le CyberZode Qui Frtille

Syntaxe de
MySQL
http://cyberzoide.developpez.com

11

Types des attributs (I)


Les proprits de vos objets peuvent tre de types trs diffrents :
Nombre entier sign ou non (temprature, quantit commande, ge)
Nombre virgule (prix, taille)
Chane de caractres (nom, adresse, article de presse)
Date et heure (date de naissance, heure de parution)
numration (une couleur parmi une liste prdfinie)
Ensemble (une ou des monnaies parmi une liste prdfinie)
Il sagit de choisir le plus adapt vos besoins.
Ces types requirent une plus ou moins grande quantit de donnes stocker.
Par exemple, ne pas choisir un LONGTEXT pour stocker un prnom mais
plutt un VACHAR(40) !

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

12

Types des attributs (II) entiers


nom

borne infrieure
-128

127

255

-32768

32767

65535

-8388608

8388607

16777215

-2147483648

2147483647

4294967295

-9223372036854775808

9223372036854775807

18446744073709551615

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

borne suprieure

BIGINT UNSIGNED
(*) : INTEGER est un synonyme de INT.
UNSIGNED permet davoir un type non sign.
ZEROFILL : remplissage des zros non significatifs.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

13

Types des attributs (III) 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.
Exemple du type FLOAT :
-1.175494351E-38
-3.402823466E+38
nom

FLOAT
DOUBLE*

3.402823466E+38

1.175494351E-38

domaine ngatif :
borne infrieure
borne suprieure

Domaine positif :
borne infrieure
borne suprieure

-3.402823466E+38
-1.175494351E-38

1.175494351E-38
3.402823466E+38

-1.7976931348623157E+308
-2.2250738585072014E-308

2.2250738585072014E-308
1.7976931348623157E+308

(*) : REAL est un synonyme de DOUBLE.


Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

14

Types des attributs (IV) chanes


nom

longueur

CHAR(M)

Chane de taille fixe M, o 1<M<255, complte avec


des espaces si ncessaire.

CHAR(M) BINARY

Idem, mais insensible la casse lors des tris et


recherches.

VARCHAR(M)

Chane de taille variable, de taille maximum M, o


1<M<255, complt avec des espaces si ncessaire.

VARCHAR(M) BINARY

Idem, mais insensible la casse lors des tris et


recherches.

TINYTEXT

Longueur maximale de 255 caractres.

TEXT

Longueur maximale de 65535 caractres.

MEDIUMTEXT

Longueur maximale de 16777215 caractres.

LONGTEXT

Longueur maximale de 4294967295 caractres.

DECIMAL(M,D)*

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.


Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

15

Types des attributs (V) chanes


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.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

16

Types des attributs (VI) dates et heures


nom

description

DATE

Date au format anglophone AAAA-MM-JJ.

DATETIME

Date et heure au format anglophone AAAA-MM-JJ HH:MM:SS.

TIMESTAMP

Affiche la date et lheure sans sparateur : AAAAMMJJHHMMSS.

TIMESTAMP(M)

Idem mais M vaut un entier pair entre 2 et 14. Affiche les M premiers
caractres de TIMESTAMP.

TIME

Heure au format HH:MM:SS.

YEAR

Anne au format AAAA.

nom

description

TIMESTAMP(2)

AA

TIMESTAMP(4)

AAMM

TIMESTAMP(6)

AAMMJJ

TIMESTAMP(8)

AAAAMMJJ

TIMESTAMP(10)

AAMMJJHHMM

TIMESTAMP(12)

AAMMJJHHMMSS

TIMESTAMP(14)

AAAAMMJJHHMMSS

Le CyberZode Qui Frtille

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.

http://cyberzoide.developpez.com

17

Types des attributs (VII) dates et heures


nom

description

DATE

Date au format anglophone AAAA-MM-JJ.

DATETIME

Date et heure au format anglophone AAAA-MM-JJ HH:MM:SS.

TIMESTAMP

Affiche la date et lheure sans sparateur : AAAAMMJJHHMMSS.

TIMESTAMP(M) Idem mais M vaut un entier pair entre 2 et 14. Affiche les M
premiers caractres de TIMESTAMP.
TIME

Heure au format HH:MM:SS.

YEAR

Anne au format AAAA.

Le format de date AAAA-MM-JJ signifie : anne sur 4 chiffre, mois sur 2


chiffres et jour sur 2 chiffres avec pour sparateur le tiret. Le format dheure
HH:MM:SS signifie : heure, minute et seconde chacune sur 2 chiffres, avec
pour sparateur les deux points.
Dans le format tendu qui comprend la date et lheure, des deux dernires
sont spares par un espace. Les formats de date sont assez permissifs car
des variantes sont tolres. Il est possible de mettre nimporte quel caractre
qui ne soit pas un chiffre en guise de sparateur, il est aussi possible de na
pas en mettre, comme cela est affich par TIMESTAMP.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

18

Types des attributs (VIII) 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
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.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

19

Types des attributs (IX) 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.
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.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

20

Identificateurs
Les noms des bases, relations, attributs, index et alias sont constitus de
caractres alphanumriques et des caractres _ et $.
Un nom comporte au maximum 64 caractres.
Comme les bases de donnes et les relations sont codes directement dans le
systme de fichiers, la sensibilit la casse de MySQL dpend de celle du
systme dexploitation sur lequel il repose. Sous Windows, la casse na pas
dimportance ; alors que sous Unix, elle en a !
Le point . est un caractre rserv utilis comme sparateur entre le nom
dune base et celui dune relation, entre le nom dune relation et celui dun
attribut.
Exemple :
SELECT base1.table25.attribut5
FROM base1.table25

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

21

Exemple (I)
Imaginons que lon veuille construire la version web dun journal papier. Nous
devrons crer une table pour stocker les articles de presse. Les informations
relatives un article sont les suivantes : titre, texte, date de parution, auteur,
rubrique.
Un titre ayant une longueur raisonnable, il sera de type VARCHAR(80), le texte
pourra tre trs grand : TEXT (65535 caractres !), la date sera au format
DATE (YYYY:MM:JJ). Lauteur pourra tre cod sur un VARCHAR(80). Et la
rubrique pourrait tre un ENUM.
CREATE TABLE article (
id MEDIUM INT UNSIGNED PRIMARY KEY,
titre VARCHAR(80),
texte TEXT,
parution DATE,
auteur VARCHAR(80),
rubrique ENUM(conomie,sports,international,politique,culture)
)

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

22

Exemple (II)
Cette dfinition apporte certaines limitations : le nombre et le nom des
rubriques sont fixs la cration de la relation (CREATE TABLE). Bien sr, il
sera toujours possible de modifier la dfinition de la table (ALTER TABLE) pour
modifier ou ajouter une rubrique ; mais ce ne sera pas pratique du tout.
On peut imaginer une interface web qui permette un administrateur dajouter,
de renommer ou de supprimer des rubriques. Pour cela on va crer une
nouvelle relation : la table rubrique.
La relation article contiendra non plus le nom de la rubrique mais une
rfrence vers le nom de cette rubrique. Ainsi, lors dune slection, il faudra
faire une jointure entre les deux tables article et rubrique pour connatre le
nom de la rubrique associe un article.
CREATE TABLE article (
CREATE TABLE rubrique (
id TINYINT UNSIGNED PRIMARY KEY,

label VARCHAR(40)
rubrique_idx TINYINT
)
)
SELECT *
FROM article,rubrique
WHERE article.rubrique_idx=rubrique.id
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

23

Crer une relation (I)


La cration dune relation utilise la commande CREATE TABLE selon la
syntaxe suivante :
CREATE [TEMPORARY] TABLE nom_relation [IF NOT EXISTS] (
nom_attribut TYPE_ATTRIBUT [OPTIONS]

)
TEMPORARY donne pour dure de vie la table : le temps de la connexion de
lutilisateur au serveur, aprs, elle sera dtruite. En labsence de cette option, la
table sera permanente moins dtre dtruite par la commande DROP TABLE.
Loption IF NOT EXIST permet de ne crer cette table que si une table de
mme nom nexiste pas encore.
A lintrieur des parenthses, il sera list tous les attributs, cls et indexs de la
table.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

24

Crer une relation (II)


Le type de lattribut doit tre dun type vu prcdemment.
Les options seront vues au fur et mesure du cours.
Exemple du carnet dadresse :
CREATE TABLE Personne (
nom VARCHAR(40),
prnom VARCHAR(40),
adresse TINYTEXT,
tlphone DECIMAL(10,0)
)
Notre carnet dadresse est stock dans un tableau (appel Relation) de nom
Personne qui comporte les colonnes (dites aussi attributs) suivantes : nom
(chane de 40 caractres maximum), prnom (idem), adresse (texte de
longueur variable mais infrieure 255 caractres) et tlphone (chane de 10
caractres). Chacune des personnes ajouter au carnet dadresse occupera
une ligne de cette table. Une ligne est dite enregistrement dans le jargon des
bases de donnes.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

25

Crer une relation (III)


A sa cration, la table peut tre remplie par une requte SELECT (qui sera vue
en dtail plus tard). Par dfaut, une table est vide sa cration.
Exemple :
CREATE TABLE Personne (
nom VARCHAR(40),
prnom VARCHAR(40),
adresse TINYTEXT,
tlphone DECIMAL(10,0)
) SELECT firstname, name, town, tel FROM Users
Les options IGNORE et REPLACE placer entre la parenthse fermante et le
SELECT permettent respectivement dignorer les doublons et de remplacer les
doublons par la dernire valeur trouve. Ces options ne sont prises en compte
que pour grer le problme des contraintes dunicit (UNIQUE, PRIMARY
KEY).

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

26

Cl primaire (I)
Pour des raisons pratiques, nous souhaitons pouvoir associer chacun des
enregistrements de la relation un identifiant numrique unique qui puise tre
pass en paramtre nos scripts PHP.
Pour cela on rajoute un nouvelle attribut de type entier. Pour nous facilit la
tche, cet entier ne devra pas tre sign mais tre suffisamment grand pour
identifier tous nos enregistrements car destin un dcompte (donc dbute
forcment 1 et pas -127 par exemple).
Dans notre exemple, le carnet dadresse ne devrait pas excder plusieurs
centaines de personnes. Ainsi un attribut de type SMALLINT UNSIGNED
devrait faire laffaire. Nous le nommerons par la suite : id.
Cet attribut devra ne jamais tre vide, il faut donc prciser loption NOT NULL
pour le forcer prendre une valeur de son domaine (entre 0 et 65535).
Il devra aussi tre unique, cest--dire que deux enregistrements ne pourront
pas avoir une valeur identique de id. Il faut alors faire la dclaration suivante :
UNIQUE (id) la suite de la liste des attributs.
Pour simplifier, on utilisera loption PRIMARY KEY qui regroupe NOT NULL et
UNIQUE en remplacement des deux dernires dclarations.
Et pour finir, il faut signifier que cette valeur doit sincrmenter
automatiquement chaque insertion dun enregistrement grce loption
AUTO_INCREMENT.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

27

Cl primaire (II)
Notre exemple devient :
CREATE TABLE Personne (
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(40),
prnom VARCHAR(40),
adresse TINYTEXT,
tlphone DECIMAL(10,0)
)
Cet identifiant numrique unique auto-incrmental, sappelle une cl
primaire .
La numrotation des cls primaires, dbute 1 et pas 0.
Personnes
Id

nom

prnom

adresse

tlphone

Dupond

Marc

8 rue de loctet

0123456789

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

28

Cl primaire (III)
Notre cl primaire peut tre associe simultanment plusieurs attributs mais
selon une syntaxe diffrente.
Si au lieu de crer un identifiant numrique unique, on souhaite simplement
interdire davoir des doublon sur le couple (nom,prnom) et den interdire la
nullit, on va crer une cl primaire sur ce couple.
La connaissance des seuls nom et prnom suffit identifier sans ambigut un
et un seul enregistrement.
Mauvaise syntaxe :
CREATE TABLE Personne (
nom VARCHAR(40) PRIMARY KEY,
prnom VARCHAR(40) PRIMARY KEY,
adresse TINYTEXT,
Bonne syntaxe :
tlphone DECIMAL(10,0)
CREATE TABLE Personne (
)
nom VARCHAR(40),
prnom VARCHAR(40),
adresse TINYTEXT,
tlphone DECIMAL(10,0),
PRIMARY KEY (nom,prnom)
)
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

29

Attribut non nul


Considrons que lon souhaite que certains attributs aient obligatoirement une
valeur. On utilisera loption NOT NULL.
Dans ce cas, si malgr tout, aucune valeur nest fournie, la valeur par dfaut
si elle est dclare la cration de la relation sera automatiquement affecte
cet attribut dans lenregistrement.
Si aucune valeur par dfaut nest dclare :
- la chane vide sera affecte lattribut sil est de type chane de caractres
- la valeur zro 0 sil est de type nombre
- la date nulle 0000-00-00 et/ou lheure nulle 00:00:00 sil est de type date,
heure ou date et heure.
Exemple :
adresse TINYTEXT NOT NULL
Au contraire, on utilisera loption NULL si on autorise labsence de valeur.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

30

Valeur par dfaut


Pour donner une valeur par dfaut un attribut, on utilise loption DEFAULT.
Lors de lajout dun enregistrement cette valeur sera affecte lattribut si
aucune valeur nest donne.
Exemple :
tlphone DECIMAL(10,0) DEFAULT 0123456789
Les attributs de type chane de caractres de la famille TEXT et BLOB ne
peuvent pas avoir de valeur par dfaut.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

31

Attribut sans doublon (I)


Pour interdire lapparition de doublon pour un attribut, on utilise loption
UNIQUE.
Syntaxe :
UNIQUE [nomdelacontrainte](liste des attributs)
Exemple, pour interdire tout doublon de lattribut nom :
UNIQUE(nom)
Pour interdire les doublons sur lattribut nom mais les interdire aussi sur
prnom, tout en les laissant indpendants :
UNIQUE(nom)
UNIQUE(prnom)
nom

prnom

Dupond

Marc

Dupont

Pierre

Martin

Marc

Le CyberZode Qui Frtille

enregistrement interdit
car Marc est un doublon
dans la colonne prnom

http://cyberzoide.developpez.com

32

Attribut sans doublon (II)


Pour interdire tout doublon un ensemble dattributs (tuple), on passe en
paramtre UNIQUE la liste des attributs concerns.
Pour interdit tout doublon du couple (nom, prnom) :
UNIQUE(nom,prnom)

nom

prnom

Dupond

Marc

Dupont

Pierre

Martin

Marc

Martin

Pierre

Martin

Marc

Le CyberZode Qui Frtille

enregistrement interdit car le


couple (Martin, Marc) est un
doublon du couple (nom,prnom)

http://cyberzoide.developpez.com

33

Index (I)
Lors de la recherche dinformations dans une relation, MySQL parcours la
table correspondante dans nimporte quel ordre. Dans le cas dun grand
nombre de lignes, cette recherche est trs trs longue du fait du parcours de
TOUTE la table.
Pour y remdier, une optimisation possible et FORTEMENT recommande, est
dutiliser des indexs.
La cration dun index associ un attribut ou un ensemble ordonn
dattributs va crer une liste ordonne des valeurs de ces attributs et de
ladresse de la ligne associe. Cest sur les valeurs de cette liste que se fera
les recherches et les tris. Les algorithmes de recherche et de tri sur des
ensembles ordonnes sont normment plus rapides !
Ainsi, dune recherche cot prohibitif, on passe une recherche sur un
ensemble dj tri. On gagne donc normment en temps daccs aux
informations. Bien que cela ralentisse les mises jour (insertion, suppression,
modification de cl).
On choisira de crer des indexs sur les attributs qui seront les plus sollicits
par les recherches ou utiliss comme critre de jointure. Par contre, on
pargnera les attributs qui contiennent peu de valeurs diffrentes les unes des
autres et ceux dont les valeurs sont trs frquemment modifies.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

34

Index (II)
Syntaxe :
INDEX index (liste des attributs)
Exemple, pour crer un index sur les 3 premiers caractres seulement
de lattribut nom :
INDEX idx_nom (nom(3))
Exemple, pour crer un index sur le couple (nom,prnom) :
INDEX idx_nom_prenom (nom,prnom)
Un index peut porter sur 15 colonnes maximum.
Une table peut possder au maximum 16 indexs.
Un index peut avoir une taille dau maximum 256 octets et ne doit
porter que sur des attributs NOT NULL.
Il suffit de suffixer lattribut (CHAR, VARCHAR) pour dire de ne prendre
que les M premiers caractres pour lindexation.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

35

Supprimer une relation


La commande DROP TABLE prend en paramtre le nom de la table
supprimer. Toutes les donnes quelle contient sont supprimes et sa dfinition
aussi.
Syntaxe :
DROP TABLE relation
Exemple :
DROP TABLE Personnes
Si un beau jour on saperoit quune relation a t mal dfinie au dpart, plutt
que de la supprimer et de la reconstruire bien comme il faut, on peut la
modifier trs simplement. Cela vite de perdre les donnes quelle contient.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

36

Modifier une relation


La cration dune relation par CREATE TABLE nen rend pas dfinitives les
spcifications. Il est possible den modifier la dfinition par la suite, tout moment
par la commande ALTER TABLE.
Voici ce quil est possible de raliser :
- ajouter/supprimer un attribut
- crer/supprimer une cl primaire
- ajouter une contrainte dunicit (interdire les doublons)
- changer la valeur par dfaut dun attribut
- changer totalement la dfinition dun attribut
- changer le nom de la relation
- ajouter/supprimer un index

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

37

Ajouter un attribut
Syntaxe :
ALTER TABLE relation ADD definition [ FIRST | AFTER attribut]
Ajoutons lattribut fax qui est une chane reprsentant un nombre de 10
chiffres:
ALTER TABLE Personnes ADD fax DECIMAL(10,0)
Nous aurions pu forcer la place o doit apparatre cet attribut. Pour le mettre
en tte de la liste des attributs de la relation, il faut ajouter loption FIRST en fin
de commande. Pour le mettre aprs lattribut tlphone, il aurait fallu ajouter
AFTER tlphone.
Note : il ne doit pas dj avoir dans la relation un attribut du mme nom !

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

38

Supprimer un attribut (I)


Attention, supprimer un attribut implique la suppression des valeurs qui se
trouvent dans la colonne qui correspond cet attribut, sauf utiliser loption
IGNORE.
Syntaxe :
ALTER TABLE relation DROP attribut
Exemple :
ALTER TABLE Personnes DROP prnom

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

39

Supprimer un attribut (II)


La suppression dun attribut peut incidemment provoquer des erreurs sur les
contraintes cl primaire (PRIMARY KEY) et unique (UNIQUE).
CREATE TABLE Personne (
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(40),
prnom VARCHAR(40),
adresse TINYTEXT,
tlphone DECIMAL(10,0),
UNIQUE(nom,prnom)
)
ALTER TABLE Personnes DROP prnom

nom

prnom

nom

Dupond

Marc

Dupond

Martin

Marc

Martin

Martin

Pierre

Martin

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

Refus doprer la
suppression, car cela
contredirait la contrainte
dunicit qui resterait sur
lattribut nom.

40

Crer une cl primaire


La cration dune cl primaire nest possible quen labsence de cl primaire
dans la relation.
Syntaxe :
ALTER TABLE relation ADD PRIMARY KEY (attribut)
Exemple :
ALTER TABLE Personnes ADD PRIMARY KEY (nom,prnom)

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

41

Supprimer une cl primaire


Comme une cl primaire est unique, il ny a aucune ambigut lors de la
suppression.
Syntaxe :
ALTER TABLE relation DROP PRIMARY KEY
Exemple :
ALTER TABLE Personnes ADD PRIMARY KEY
Sil ny a aucune cl primaire lorsque cette commande est excute, aucun
message derreur ne sera gnr, le commande sera simplement ignore.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

42

Ajout dune contrainte dunicit


Il est possible (facultatif) de donner un nom la contrainte.
Cette contrainte peut sappliquer plusieurs attributs.
Si les valeurs dj prsentes dans la relation sont en contradiction avec cette
nouvelle contrainte, alors cette dernire ne sera pas applique et une erreur
sera gnre.
Syntaxe :
ALTER TABLE relation ADD UNIQUE [contrainte] (attributs)
Exemple pour interdire tout doublon sur lattribut fax de la relation Personnes :
ALTER TABLE Personnes ADD UNIQUE u_fax (fax)
Autre exemple fictif :
ALTER TABLE Moto ADD UNIQUE u_coul_vitre (couleur,vitre)

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

43

Changer la valeur par dfaut dun attribut


Pour changer ou supprimer la valeur par dfaut dun attribut.
Attention aux types qui nacceptent pas de valeur par dfaut (les familles
BLOB et TEXT).
Syntaxe :
ALTER TABLE relation ALTER attribut { SET DEFAULT valeur |
DROP DEFAULT }
Changer sa valeur par dfaut :
ALTER TABLE Personnes ALTER tlphone SET DEFAULT
9999999999
Supprimer sa valeur par dfaut :
ALTER TABLE Personnes ALTER tlphone DROP DEFAULT
Le changement ou la suppression naffecte en rien les enregistrements qui ont
eu recours cette valeur lors de leur insertion.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

44

Changer la dfinition dun attribut


Pour changer la dfinition de lattribut sans le renommer :
ALTER TABLE relation MODIFY attribut definition_relative
Exemple 1 :
ALTER TABLE Personnes MODIFY fax VARCHAR(14)
Pour changer sa dfinition en le renommant :
ALTER TABLE relation CHANGE attribut definition_absolue
Exemple 2 :
ALTER TABLE Personnes CHANGE fax num_fax VARCHAR(14)
Attention, si le nouveau type appliqu lattribut est incompatible avec les
valeurs des enregistrements dj prsents dans la relation, alors elles risques
dtres modifies ou remises zro !

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

45

Changer le nom de la relation


Syntaxe :
ALTER TABLE relation RENAME nouveau_nom
Exemple :
ALTER TABLE Personnes RENAME Carnet
Cela consiste renommer la table, et donc le fichier qui la stocke.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

46

Ajouter un index
Une table ne peut comporter que 32 indexs.
Et un index ne peut porter que sur 16 attributs maximum la fois.
Syntaxe :
ALTER TABLE relation ADD INDEX index (attributs)
Exemple :
ALTER TABLE Personnes ADD INDEX nom_complet
(nom,prnom)
Dans cet exemple, on a ajout la relation Personnes un index que lon
nomme nom_complet et qui sapplique aux deux attributs nom et prnom.
Ainsi, les recherches et les tris sur les attributs nom et prnom seront
grandement amliors. Car un index apporte les changements sous-jacents
permettant doptimiser les performances du serveur de base de donnes.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

47

Supprimer un index
Syntaxe :
ALTER TABLE relation DROP INDEX index
Exemple :
ALTER TABLE Personnes DROP INDEX nom_complet
Cette exemple permet de supprimer lindex nomm nom_complet de la relation
Personnes.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

48

Ajouter un enregistrement (I) insertion tendue


Ajouter un enregistrement une relation revient ajouter une ligne la table.
Pour cela, pour chacun des attributs, il faudra en prciser la valeur. Si
certaines valeurs sont omises, alors les valeurs par dfauts dfinie les de la
cration de la relation seront utilises. Si on ne dispose pas non plus de ces
valeurs par dfaut, alors MySQL mettra 0 pour un nombre, pour une chane,
0000-00-00 pour une date, 00:00:00 pour une heure, 00000000000000 pour un
timestamp (si le champs poste la contrainte NOT NULL). Dans le cas o
lattribut porte la contrainte NULL (par dfaut) alors la valeur par dfaut de
lattribut quel soit sont type sera la suivante : NULL.
Syntaxe dune insertion tendue :
INSERT INTO relation(liste des attributs) VALUES(liste des valeurs)
Exemple :
INSERT INTO Personnes(nom,prnom) VALUES(Martin,Jean)
REPLACE est un synonyme de INSERT, mais sans doublon. Pratique pour
respecter les contraintes dunicit (UNIQUE, PRIMARY KEY).
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

49

Ajouter un enregistrement (II) insertion standard


Une syntaxe plus courte mais plus ambigu permet dinsrer un
enregistrement dans une table. Elle consiste omettre la liste des noms
dattribut la suite du nom de la relation. Cela impose que la liste des valeurs
suivant le mot cl VALUES soit exactement celle dfinie dans la table et
quelles soient dans lordre dfini dans la dfinition de la table ; sinon des
erreurs se produiront.
Syntaxe dune insertion standard :
INSERT INTO relation VALUES(liste exhaustive et ordonne des
valeurs)
Exemple :
CREATE TABLE Ballon (
taille INT NOT NULL,
couleur VARCHAR(40)
)
INSERT INTO Ballon VALUES(20, rouge) ok
INSERT INTO Ballon VALUES(rouge, 20) faux
INSERT INTO Ballon VALUES(rouge) faux
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

50

Ajouter un enregistrement (III) insertion complte


Dans le cas o lon souhaite procder linsertion de plusieurs
enregistrements les uns la suite des autres, il y a deux mthodes :
- faire une boucle qui envoie autant dINSERT que ncessaire au serveur
- faire une insertion dite complte
Syntaxe dune insertion complte :
INSERT INTO relation VALUES (liste des valeurs), (liste dautres
valeurs), (liste dencore dautres valeurs),
Exemple :
INSERT INTO Ballon VALUES (20, rouge), (35, vert fluo), (17,
orange), (28, crulen)
Cet exemple est quivalent aux requtes suivantes :
INSERT INTO Ballon VALUES(20, rouge)
INSERT INTO Ballon VALUES(35, vert fluo)
INSERT INTO Ballon VALUES(17, orange)
INSERT INTO Ballon VALUES(28, crulen)

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

51

Ajouter un enregistrement (IV) insertion complte


Linsertion complte permet dinsrer plusieurs enregistrements dans une
mme table. Une insertion complte ne permet pas dinsrer des donnes
dans plusieurs tables diffrentes.
Linsertion complte et linsertion tendue peuvent tre associes dans une
mme requte :
INSERT INTO Ballon(taille, couleur) VALUES (20, rouge), (35, vert
fluo), (17, orange), (28, crulen)

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

52

Modifier un enregistrement (I)


Pour modifier un ou des enregistrement(s) dune relation, il faut prciser un
critre de slection des enregistrement modifier (clause WHERE), il faut
aussi dire quels sont les attributs dont on va modifier la valeur et quelles sont
ces nouvelles valeurs (clause SET).
Syntaxe :
UPDATE [ LOW_PRORITY ] relation SET attribut=valeur, [
WHERE condition ] [ LIMIT a ]
Exemple :
UPDATE Personnes SET tlphone=0156281469 WHERE
nom=Martin AND prnom = Pierre
Cet exemple modifie le numro de tlphone de Martin Pierre.
LOW_PRORITY est une option un peu spciale qui permet de nappliquer la
ou les modification(s) quune fois que plus personne nest en train de lire dans
la relation.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

53

Modifier un enregistrement (II)


Il est possible de modifier les valeurs dautant dattributs que la relation en
contient.
Exemple pour modifier plusieurs attributs :
UPDATE Personnes SET tlphone=0156281469,
fax=0156281812 WHERE id = 102
Pour appliquer la modification tous les enregistrements de la relation, il suffit
de ne pas mettre de clause WHERE.
LIMIT a permet de nappliquer la commande quaux a premiers
enregistrements satisfaisant la condition dfinie par WHERE.
Autre exemple :
UPDATE Enfants SET age=age+1
Il est donc possible de modifier la valeur dun attribut relativement sa valeur
dj existante.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

54

Supprimer un enregistrement
Attention, la suppression est dfinitive !
Syntaxe :
DELETE [ LOW_PRIORITY ] FROM relation [ WHERE condition ] [
LIMIT a ]
Exemple :
DELETE FROM Personnes WHERE nom=Martin AND
prnom=Marc
Pour vider une table de tous ces lments, ne pas mettre de clause WHERE.
Cela efface et recre la table, au lieu de supprimer un un chacun des tuples
de la table (ce qui serait trs long).
Exemple :
DELETE FROM Personnes

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

55

Slectionner des enregistrements (I)


Pour extraire de votre base de donnes des informations, comme la liste des
personnes de votre carnet dadresse qui vivent Paris.
Syntaxe gnrale :
SELECT [ DISTINCT ] attributs
[ INTO OUTFILE fichier ]
[ FROM relation ]
[ WHERE condition ]
[ GROUP BY attributs [ ASC | DESC ] ]
[ HAVING condition ]
[ ORDER BY attributs ]
[ LIMIT [a,] b ]
Exemple :
SELECT nom,prnom FROM Personnes WHERE adresse LIKE
%paris%

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

56

Slectionner des enregistrements (II)


Nom

Description

SELECT

Spcifie les attributs dont on souhaite connatre les valeurs.

DISTINCT

Permet dignorer les doublons de ligne de rsultat.

INTO OUTFILE

Spcifie le fichier sur lequel effectuer la slection.

FROM

Spcifie le ou les relations sur lesquelles effectuer la slection.

WHERE

Dfinie le ou les critres de slection sur des attributs.

GROUP BY

Permet de grouper les lignes de rsultats selon un ou des


attributs.

HAVING

Dfinie un ou des critres de slection sur des ensembles de


valeurs dattributs aprs groupement.

ORDER BY

Permet de dfinir lordre (ASCendant par dfaut ou


DESCendant) dans lenvoi des rsultats.

LIMIT

Permet de limiter le nombre de lignes du rsultats

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

57

Slectionner des enregistrements (III)


Procdons par tapes :
Pour slectionner tous les enregistrements dune relation :
SELECT * FROM relation
Pour slectionner toutes les valeurs dun seul attribut :
SELECT attribut FROM relation
Pour liminer les doublons :
SELECT DISTINCT attribut FROM relation
Pour trier les valeurs en ordre croissant :
SELECT DISTINCT attribut FROM relation ORDER BY attribut ASC
Pour se limiter aux num premiers rsultats :
SELECT DISTINCT attribut FROM relation ORDER BY attribut ASC
LIMIT num
Pour ne slectionner que ceux qui satisfont une condition :
SELECT DISTINCT attribut FROM relation WHERE condition
ORDER BY attribut ASC LIMIT num

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

58

Slectionner des enregistrements (IV)


Relation de dpart :
SELECT * FROM Gens
Gens

Nom

Prenom

Age

Dupond

Pierre

24

Martin

Marc

48

Dupont

Jean

51

Martin

Paul

36

Nom

Dupond

Lionel

68

Dupond

Chirac

Jacques

70

Martin

SELECT Nom FROM Gens


Gens

Dupont

Martin

Gens
Nom

Dupond

Dupond

Chirac

Martin
Dupont
Chirac

SELECT DISTINCT Nom FROM Gens

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

59

Slectionner des enregistrements (V)


Gens
Nom
Chirac
Dupond

SELECT DISTINCT Nom


FROM Gens
ORDER BY Nom ASC

Dupont

Martin

Gens
Nom
Chirac
Dupond

Gens
Nom
Dupond

Le CyberZode Qui Frtille

SELECT DISTINCT Nom


FROM Gens
ORDER BY Nom ASC
LIMIT 2

SELECT DISTINCT Nom


FROM Gens
WHERE Nom <> Chirac
ORDER BY Nom ASC
LIMIT 2

http://cyberzoide.developpez.com

60

Optimisation
Aprs la suppression de grandes parties dune table contenant des index, les
index des tuples supprims sont conservs, rallongeant dautant les slections.
Pour supprimer ces index obsoltes et vider les trous , il faut loptimiser.
Syntaxe :
OPTIMIZE TABLE Relation
Exemple :
OPTIMIZE TABLE Personnes

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

61

Jointure volue (I)


En dbut de ce document, on a vu la jointure suivante :
SELECT Personnes.nom, nblivres
FROM Personnes, Bibliothque
WHERE Personnes.nom = Bibliothque.nom

qui permet de concatner deux relation en prenant un attribut comme pivot.


Il est possible de concatner deux relation sur plusieurs attributs la fois, ou
mme de concatner X relation sur Y attributs.
Les requtes utilisant trs souvent les jointures, il a t cr une syntaxe
spciale plus rapide : JOIN que la mthode vue plus haut : avec la clause
WHERE.
Ainsi la jointure prcdente peut scrire aussi :
SELECT Personnes.nom, nblivres
FROM Personnes INNER JOIN Bibliothque
USING (nom)

ce qui signifie que les deux relations Personnes et Bibliothque sont


concatne (INNER JOIN) en utilisant (USING) lattribut nom.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

62

Jointure volue (II)


La syntaxe USING permet de lister les attributs servant de pivot. Ces attributs
doivent porter le mme nom dans chacune des tables devant tre
concatnes.
Si les attributs pivots ne portent pas le mme nom, il faut utiliser la syntaxe
ON.
Ainsi la jointure prcdente peut scrire aussi :
SELECT Personnes.nom, nblivres
FROM Personnes INNER JOIN Bibliothque
ON Personnes.nom = Bibliothque.nom

La mthode INNER JOIN ninclus les enregistrements de la premire table que


sils ont une correspondance dans la seconde table.
Personnes

Bibliothque

Rsultat de la jointure

Nom

Prnom

Nom

Nblivres

Nom

Nblivres

Martin

Jean

Martine

Tartan

10

Tartan

Pion

Tartan

10

Dupond

Dupond

Jacques

Dupond

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

63

Jointure volue (III)


Pour remdier aux limites de INNER JOIN, il existe la syntaxe LEFT JOIN qui
inclus tous les enregistrements de la premire table mme sils nont pas de
correspondance dans la seconde table. Dans ce cas prcis, lattribut non
renseign prendra la valeur NULL.
L encore, le ON peut avantageusement tre remplac par le USING.
La jointure devient :
SELECT Personnes.nom, nblivres
FROM Personnes LEFT JOIN Bibliothque
ON Personnes.nom = Bibliothque.nom
Personnes

Bibliothque

Rsultat de la jointure

Nom

Prnom

Nom

Nblivres

Nom

Nblivres

Martin

Jean

Martine

Martin

NULL

Tartan

Pion

Tartan

10

Tartan

10

Dupond

Jacques

Dupond

Dupond

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

64

3
Le CyberZode Qui Frtille

Fonctions
de MySQL
http://cyberzoide.developpez.com

65

Les fonctions
Bien que ces fonctions appartiennent typiquement MySQL, la cration dun
chapitre part se justifie par le fait que je vais me contenter ici dnumrer les
fonctions les plus courantes.
Reportez-vous au manuel MySQL pour la liste dtaille de toutes les fonctions
disponibles dans votre version du serveur MySQL.
Ces fonctions sont ajouter vos requtes dans un SELECT, WHERE,
GROUP BY ou encore HAVING.
Dabord sachez que vous avez votre disposition :
les parenthses ( ),
les oprateurs arithmtiques (+, -, *, /, %),
les oprateurs binaires (<, << , >, >>, |, &),
les oprateurs logiques qui retournent 0 (faux) ou 1 (vrai) (AND, OR, NOT,
BETWEEN, IN),
les oprateurs relationnels (<, <=, =, >, >=, <>).
Les oprateurs et les fonctions peuvent tres composs entre eux pour donner
des expressions trs complexes.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

66

Quelques exemples
SELECT nom
Liste du nom des produits dont le prix est infrieur ou
gale 100.5 EUR.
FROM produits
WHERE prix <= 100.5
SELECT nom,prnom
Liste des nom et prnom des lves dont
lge est compris entre 12 et 16 ans.
FROM lves
WHERE age BETWEEN 12 AND 16
SELECT modle
FROM voitures
WHERE couleur IN (rouge, blanc, noir)

Liste des modles de voiture dont


la couleur est dans la liste : rouge,
blanc, noir.

SELECT modle
FROM voitures
WHERE couleur NOT IN (rose, violet)

Liste des modles de voiture dont


la couleur nest pas dans la liste :
rose, violet.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

67

Fonctions de comparaison de chanes


Le mot cl LIKE permet de comparer deux chanes.
Le caractre % est spcial et signifie : 0 ou plusieurs caractres.
Le caractre _ est spcial et signifie : 1 seul caractre, nimporte lequel.
Lexemple suivant permet de rechercher tous les clients sont le prnom
commence par Jean, cela peut tre Jean-Pierre, etc :
SELECT nom
FROM clients
WHERE prnom LIKE Jean%
Pour utiliser les caractres spciaux ci-dessus en leur enlevant leur fonction
spciale, il faut les faire prcder de lantislash : \.
Exemple, pour lister les produit dont le code commence par la chane _XE :
SELECT *
FROM produit
WHERE code LIKE \_XE%

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

68

Fonctions mathmatiques
Fonction

Description

ABS(x)

Valeur absolue de X.

SIGN(x)

Signe de X, retourne -1, 0 ou 1.

FLOOR(x)

Arrondi lentier infrieur.

CEILING(x)

Arrondi lentier suprieur.

ROUND(x)

Arrondi lentier le plus proche.

EXP(x), LOG(x), SIN(x),


COS(x), TAN(x), PI()

Bon, l cest les fonctions de maths de base

POW(x,y)

Retourne X la puissance Y.

RAND(), RAND(x)

Retourne un nombre alatoire entre 0 et 1.0


Si x est spcifi, entre 0 et X

TRUNCATE(x,y)

Tronque le nombre X la Yme dcimale.

SELECT nom
FROM filiales
WHERE SIGN(ca) = -1
ORDER BY RAND()
Le CyberZode Qui Frtille

Cet exemple affiche dans un ordre


alatoire le nom des filiales dont le chiffre
daffaire est ngatif.
A noter que : SIGN(ca) = -1 ! ca < 0
http://cyberzoide.developpez.com

69

Fonctions de chanes
Fonction

Description

TRIM(x)

Supprime les espaces de dbut et de fin de chane.

LOWER(x)

Converti en minuscules.

UPPER(x)

Converti en majuscules.

LONGUEUR(x)

Retourne la taille de la chane.

LOCATE(x,y)

Retourne la position de la dernire occurrence de x


dans y. Retourne 0 si x nest pas trouv dans y.

CONCAT(x,y,)

Concatne ses arguments.

SUBSTRING(s,i,n)

Retourne les n derniers caractres de s en


commenant partir de la position i.

SOUNDEX(x)

Retourne une reprsentation phontique de x.

SELECT UPPER(nom)
FROM clients
WHERE SOUNDEX(nom) = SOUNDEX(Dupond)
On affiche en majuscules le nom de tous les clients dont le nom ressemble
Dupond.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

70

Fonctions de dates et heures


Fonction

Description

NOW()

Retourne la date et heure du jour.

TO_DAYS(x)

Conversion de la date X en nombre de jours


depuis le 1er janvier 1970.

DAYOFWEEK(x)

Retourne le jour de la semaine de la date x


sous la forme dun index qui commence 1
(1=dimanche, 2=lundi)

DAYOFMONTH(x)

Retourne le jour du mois (entre 1 et 31).

DAYOFYEAR(x)

Retourne le jour de lanne (entre 1 et 366).

SECOND(x), MINUTE(x),
HOUR(x), MONTH(x),
YEAR(x), WEEK(x)

Retournent respectivement les secondes,


minutes, heures, mois, anne et semaine de la
date.

SELECT titre
FROM article
WHERE (TO_DAYS(NOW()) TO_DAYS(parution)) < 30
Cet exemple affiche le titre des articles parus il y a moins de 30 jours.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

71

Fonctions utiliser dans les GROUP BY


Fonction

Description

COUNT([DISTINCT]x,y,) Dcompte des tuples du rsultat par projection


sur le ou les attributs spcifis (ou tous avec
*). Loption DISTINCT limine les doublons.
MIN(x), MAX(x), AVG(x),
SUM(x)

Calculent respectivement le minimum, le


maximum, la moyenne et la somme des valeurs
de lattribut X.

SELECT DISTINCT model


FROM voiture
GROUP BY model
HAVING COUNT(couleur) > 10

Ici on affiche le palmars des models


de voitures qui proposent un choix de
plus de 10 couleurs.

SELECT COUNT(*)
FROM client

Affichage de tous les clients.

SELECT DISTINCT produit.nom, SUM(vente.qt * produit.prix) AS total


FROM produit, vente
WHERE produit.id = vente.produit_idx
Classement des produits
GROUP BY produit.nom
par la valeur totale vendue.
ORDER BY total
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

72

4
Le CyberZode Qui Frtille

Interface
avec PHP
http://cyberzoide.developpez.com

73

Connexion (I)
Pour se connecter une base depuis un script php, il faut spcifier un nom de
serveur, un nom dutilisateur, un mot de passe et un nom de base.
Aucune connexion nest possible sans authentification auprs du serveur de
base de donnes.
Les actions possibles de lutilisateur sur la base laquelle il se connecte
dpendent des droits qui lui auront t fournis par ladministrateur de la base
de donnes.
mysql_connect($server,$user,$password) : permet de se connecter au
serveur $server en tant quutilisateur $user avec le mot de passe $password,
retourne lidentifiant de connexion si succs, FALSE sinon. Si ces arguments
manquent, les valeurs par dfaut du fichier de configuration php.ini seront
utilises.
mysql_select_db($base[,$id]) : permet de choisir la base $base, peut
prendre un identifiant $id de connexion ; retourne TRUE en cas de succs,
sinon FALSE. Les identifiants de connexion ne sont pas ncessaires si on ne
se connecte qu un seul serveur la fois, ils permettent seulement de lever
toute ambigut en cas de connexions multiples (vers plusieurs serveurs dans
le mme script).
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

74

Connexion (II)
mysql_close([$id]) : permet de fermer la connexion un serveur de bases de
donnes, largument optionnel $id est lidentifiant de session retourn
louverture de la connexion.
A not que toutes les connexions aux serveurs de bases de donnes sont
automatiquement fermes la fin de lexcution du script qui les aura
ouvertes.
Dans le cas o le visiteur du site doit naviguer travers diffrents script PHP
qui se connectent tous au mme serveur, il est prfrable davoir recours aux
connexions persistantes . Une connexion persistante est ouverte avec la
fonction mysql_pconnect() qui est en tout point comparable
mysql_connect() la seule diffrence que la connexion nest pas ferme la
fin du script qui a ouvert la connexion. Ainsi, les scripts suivants peuvent
continuer lancer des requtes la base de donnes sans avoir rouvrir de
connexion en direction du serveur.
Une connexion persistante ne peut pas tre ferme avec la fonction
mysql_close(). Au del dun certain temps dinactivit, la ou les connexions
persistantes ouvertes sont automatiquement fermes.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

75

Connexion (III)
Exemple 1 :
if( $id = mysql_connect(localhost,foobar,0478) ) {
if(mysql_select_db(gigabase) ) {
echo Succs de connexion.;
/* code du script */
} else {
die(Echec de connexion la base.);
}
mysql_close($id);
} else {
die(Echec de connexion au serveur de base de donnes.);
}

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

76

Connexion (IV)
Exemple 2 :
@mysql_connect(localhost,foobar,0478) or die(Echec de
connexion au serveur.);
@mysql_select_db(gigabase) or die(Echec de slection de la base.);
Cet exemple est quivalent au prcdent mais plus court crire. Le symbole
@ (arobase) permet dviter le renvoi de valeur par la fonction quil prcde.
On pourra avantageusement intgrer ce code dans un fichier que lon pourra
joindre par include(). Cest aussi un moyen de scuriser le mot de passe de
connexion.
Une connexion persistante vite davoir rouvrir une connexion dans chaque
script. Les connexions sont automatiquement fermes au bout dun certain
temps en cas dabsence de toute activit

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

77

Interrogation
Pour envoyer une requte une base de donne, il existe la fonction :
mysql_query($str) qui prend pour paramtre une chane de caractres qui
contient la requte crite en SQL et retourne un identificateur de rsultat ou
FALSE si chec.
Exemple :
$result = mysql_query(SELECT tlphone FROM Personnes WHERE
nom=\$name\);
Cet exemple recherche le tlphone dune personne portant pour nom la
valeur de la chane $name. Lidentificateur de rsultat $result permettra
dautres fonctions dextraire ligne par ligne les donnes retournes par le
serveur. Chaque appel cette fonction retournera un tuple du rsultat. Cest
pourquoi cette instruction pourra tre utilise au sein dune boucle while qui
sarrtera lorsque mysql_query() renverra FALSE.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

78

Extraction des donnes (I) tableau


mysql_fetch_row($result) : retourne une ligne de rsultat (un tuple) sous la
forme dun tableau. Les lments du tableau tant les valeurs des attributs de
la ligne. Retourne FALSE sil ny a plus aucune ligne.
Exemple 1 :
$requet = SELECT * FROM users;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_row($result)) {
$id = $ligne[0];
$name = $ligne[1];
$address = $ligne[2];
echo $id - $name, $address <br />;
}
} else {
echo Erreur de requte de base de donnes.;
}
Ici, on accde aux valeurs de la ligne par leur indice dans le tableau.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

79

Extraction des donnes (II) associatif


mysql_fetch_array($result) et mysql_fetch_assoc($result) : retournent un
tableau associatif. Les cls tant les noms des attributs et leurs valeurs
associes leurs valeurs respectives. Retourne FALSE sil ny a plus aucune
ligne.
Exemple 2 :
$requet = SELECT * FROM users;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_array($result)) {
$id = $ligne[id];
$name = $ligne[name];
$address = $ligne[address];
echo $id - $name, $address <br />;
}
} else {
echo Erreur de requte de base de donnes.;
}
Ici, on accde aux valeurs de la ligne par lattribut dans le tableau associatif.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

80

Extraction des donnes (III) objet


mysql_fetch_object($result) : retourne un objet. Les attributs de lobjet
correspondent ceux de la ligne de rsultat. Et les valeurs des attributs de
lobjet correspondent ceux de la ligne de rsultat. Retourne FALSE sil ny a
plus aucune ligne.
Exemple 3 :
$requet = SELECT * FROM users;
if($result = mysql_query($requet)) {
while($ligne = mysql_fetch_object($result)) {
$id = $ligne->id;
$name = $ligne->name;
$address = $ligne->address;
echo $id - $name, $address <br />;
}
} else {
echo Erreur de requte de base de donnes.;
}
Ici, on accde aux valeurs par leur attribut dans lobjet.
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

81

Statistiques sur une requte


mysql_affected_rows([$id]) : retourne le nombre de lignes modifies par la
dernire requte INSERT, UPDATE ou DELETE effectue sur le serveur
identifie par $id (les DELETE sans clause WHERE retourneront 0 lignes, car
la table sera recre au lieu de supprimer les lignes une une).
$requet = DELETE FROM users WHERE name LIKE \Martin%\;
$result = mysql_query($requet) or die(Erreur de base de donnes.);
$num = mysql_affected_rows();

mysql_num_rows($result) : retourne le nombre de lignes retournes par la


dernire requte SELECT dont on connat lidentifiant de rsultat $result.
$requet = SELECT name FROM users WHERE birth > \1980-05-10\;
$result = mysql_query($requet) or die(Erreur de base de donnes.);
$num = mysql_num_rows();

mysql_num_fields($result) : retourne le nombre dattributs des tuples du


rsultat dune requte.
$requet = SELECT * FROM users;
$result = mysql_query($requet) or die(Erreur de base de donnes.);
$num = mysql_num_fields();

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

82

Informations sur les attributs (I)


Les fonctions suivantes sappliquent au $field me attribut retourn par la
dernire requte identifie par $result :
mysql_field_name($result, $field) : retourne le nom
mysql_field_len($result, $field) : retourne la taille
mysql_field_type($result, $field) : retourne le type
mysql_field_flags($result, $field) : retourne les drapeaux
mysql_field_table($result, $field) : retourne le nom de la table
mysql_fetch_field($result [,$field]) : retourne un objet contenant des informations
sur lattribut $field. Ses attributs sont name (nom), table (nom de la table),
max_length (taille), type (type) et les boolens suivants : not_null, primary_key,
unique_key, multiple_key, numeric, blob, unsigned, zerofill.
mysql_field_seek($result, $field) : prpositionne lindex $field afin de ne pas le
passer en paramtre mysql_fetch_field().

Lindex commence zro.


Elles ne peuvent tre utilise quaprs un appel la fonction mysql_query()
retournant le pointeur de rsultat $result.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

83

Informations sur les attributs (II)


mysql_list_dbs([$id]) : retourne un pointeur de rsultat simulant la requte
suivante : SHOW DATABASES. Liste des bases de donnes.
mysql_list_tables($base [, $id]) : retourne un pointeur de rsultat simulant la
requte suivante : SHOW TABLES FROM $base. Liste des relations de la
base de donnes $base.
mysql_list_fields ($base, $table [, $id]) : retourne un pointeur de rsultat
simulant la requte suivante : SHOW COLUMNS FROM $table FROM
$base. Ce pointeur peut tre utilis par les fonctions mysql_field_* afin
davoir des informations sur une table $table de la base $base. Lidentifiant de
connexion $id est optionnel.
mysql_fetch_lengths($result) : retourne un tableau contenant la taille de
chaque attribut de la ligne du dernier tuple rsultat de la requte $result, ou
FALSE sinon. Ne peut tre utilise quaprs lune des fonctions dextraction.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

84

Informations sur les attributs (III)


if($result = mysql_query(SELECT * FROM forum) ) {
for($i=1; $i<= mysql_num_fields($result); $i++ ) {
echo mysql_field_name($result, $i-1), , ,
mysql_field_len($result, $i-1), , ,
Dfinition de la table :
CREATE TABLE forum (
mysql_field_type($result, $i-1), , ,
id bigint(20) unsigned auto_increment,
mysql_field_flags($result, $i-1), ,,
title tinytext NOT NULL,
mysql_field_table($result, $i-1), <br />;
mesg text NOT NULL,
hits mediumint(8) unsigned NOT NULL,
}
author_idx bigint(20) unsigned NOT NULL,
} else die(Erreur de base de donnes.);
date datetime NOT NULL,
PRIMARY KEY(id)
)

Rsultats :
nom

taille

type

drapeaux

table

id

20

int

not_null primary_key unsigned auto_increment

forum

title

255

blob

not_null blob

forum

mesg

65535

blob

not_null blob

forum

hits

int

not_null unsigned

forum

author_idx

20

int

not_null unsigned

forum

date

19

datetime

not_null

forum

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

85

Informations sur les attributs (IV)


if($result = mysql_query(SELECT * FROM forum) ) {
$infos = mysql_fetch_field($result, 0);
Rsultat :
stdClass Object
print_r($infos);
(
}
[name] => id
[table] => forum
Cet exemple affiche les informations sur le premier attribut
[def] =>
des rsultats de la requte. On voit quil sappelle id, quil
[max_length] => 2
appartient la table forum, que sa taille maximum est de
2 digits, quil porte les contraintes suivantes : NOT NULL
[not_null] => 1
et PRIMARY KEY, quil est de type numrique non sign :
[primary_key] => 1
INT, UNSIGNED.
[multiple_key] => 0
[unique_key] => 0
[numeric] => 1
[blob] => 0
[type] => int
[unsigned] => 1
[zerofill] => 0
)
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

86

Fonctions sur le serveur


mysql_create_db($base [, $id]) : cration de la base $base.
mysql_db_name($result, $row [, $field]) : Lit les noms des bases de
donnes. $result est lidentifiant de rsultat issu de mysql_list_dbs(). $row
est l'index dans le rsultat. Retourne FALSE si chec.
mysql_db_query($base, $query [, $id]) : excution de la requte $query sur
la base $base. Retourne un identifiant de rsultat si succs ou FALSE si
chec.
mysql_query($query [, $id]) : excution de la requte sur la base ouverte.
Retourne un identifiant de rsultat si succs ou FALSE si chec.
mysql_drop_db($base [, $id]) : supprime la base de donnes $base.
Retourne TRUE si succs ou FASE si chec.
mysql_select_db($base [, $id]) : slectionne la base de donnes $base sur
le serveur sur lequel on est connect et dont $id est lidentifiant de connexion.
Retourne TRUE si succs ou FASE si chec.
$result = mysql_list_dbs();
$num = mysql_num_rows($result);
for ($i=0; $i<$num; $i++)
echo mysql_db_name($result, $i).<br />;
Le CyberZode Qui Frtille

Cet exemple affiche la liste


des bases de donnes du
serveur.

http://cyberzoide.developpez.com

87

Gestion des erreurs


Il est recommand de tester systmatiquement les valeurs retournes par les
fonction de traitement sur une base de donnes afin dviter la pollution de la
page web par des Warning.
mysql_errno([$id]) : retourne le numro derreur de la dernire opration
MySQL effectue sur la connexion courante ou celle didentifiant $id.
mysql_error([$id]) : retourne le message derreur de la dernire opration
MySQL effectue sur la connexion courante ou celle didentifiant $id.
Exemple :
$requet = DELETE FROM users WHERE name LIKE \Martin%\;
if($result = mysql_query($requet)) {

} else {
echo Erreur de base de donnes n.mysql_errno().: .mysql_error();
}

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

88

Fonctions additionnelles
Quelques fonctions supplmentaires trs utiles :
mysql_free_result($result) : efface de la mmoire du serveur les lignes de rsultat de
la requte identifies par $requet. Trs utile pour amliorer les performances du
serveur. A nutiliser que si votre script utilise vraiment beaucoup de mmoire.
mysql_insert_id([$id]) : retourne lidentifiant dun attribut cl primaire
AUTO_INCREMENT de la dernire insertion.
mysql_data_seek($result, $row) : Permet de prpositionner le pointeur interne de
rsultat $result la ligne $row. Le prochain appel une fonction dextraction de tuple
du rsultat ira directement cette ligne. Retourne TRUE si succs et FALSE sinon.

Penser bien tester la valeur de retour des fonctions (mysql_query et les


autres) afin de dtecter toute erreur et dviter de polluer votre page avec des
Warnings.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

89

Directives de configuration du php.ini


Ces informations sont utilises si elles sont omises lors dune connexion :
mysql.default_host chane de caractres
Adresse par dfaut du serveur de bases de donnes.
mysql.default_user chane de caractres
Utilisateur par dfaut.
mysql.default_password chane de caractres
Mot de passe par dfaut.

Connexions persistantes :
mysql.allow_persistent boolen
Active ou dsactive les connexions persistantes.
mysql.max_persistent entier
Nombre maximum de connexions persistantes par processus.

Connexions :
mysql.max_links entier
Nombre de connexion simultanes maximum, par processus, incluant les connexions
persistantes
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

90

Administration
avec loutil web
phpMyAdmin

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

91

Prsentation
Loutil phpMyAdmin est dvelopp en PHP et offre une interface intuitive pour
ladministration des base de donnes du serveur.
Il est tlchargeable ici : http://phpmyadmin.sourceforge.net
Cet outil permet de :
- crer de nouvelles bases
- crer/modifier/supprimer des tables
- afficher/ajouter/modifier/supprimer des tupes dans des tables
- effectuer des sauvegarde de la structure et/ou des donnes
- effectuer nimporte quelle requte
- grer les privilges des utilisateurs
Les exemples qui vont suivrent
sappliquent la version 2.2.6

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

92

Cration/slection dune base de donnes


Avant de manipuler des donnes, il faut crer une ou des bases de donnes.

ETAPE 2 : slectionnez le
nom de la base
manipuler (le nombre de
tables de la base apparat
entre parenthses)

ETAPE 1 : crivez le nom de


la base de donne crer.
Puis cliquez sur Crer

Et aussi.. choix de la langue de linterface de phpMyAdmin

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

93

Gestion de la base de donnes (I)

Choix dune table


grer en particulier
crire une requte
MySQL excuter
Actions sur les tables : afficher
leur contenu intgral, faire une
slection sur critres, ajouter
des donnes, grer ses proprit
intrinsques, supprimer, vider.

Le CyberZode Qui Frtille

Excuter une requte


MySQL contenue
dans un fichier
http://cyberzoide.developpez.com

94

Gestion de la base de donnes (II)


Accs un formulaire dtaill
pour effectuer une requte

Option permettant de
transmettre le schma
sous la forme dun fichier
Affichage du schma (structure
et/ou donnes) des tables
slectionnes de la base
Accs un formulaire dtaill
dajout dune table dans la base
Supprimer la base
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

95

Affichage dune table


Rappel de la requte

Rappel de la base, de
la table et du serveur

Colonnes = noms
des attributs de la
table
Liste des
enregistrements de
la table par pages de
X lignes

Supprimer un enregistrement
Accs au formulaire de modification
dun enregistrement
Insertion dun nouvel
enregistrement
Le CyberZode Qui Frtille

Permet de naviguer dans


les pages de rsultats

Afficher par page de X lignes


http://cyberzoide.developpez.com

96

Insertion/modification dun enregistrement


Nom du
champ

Type

Choix dune fonction


appliquer la valeur saisie
Valeur saisir

Les champs et leurs types


sont dfinis lors de la
cration de la table : tous
les champs sont pas
forcment obligatoires
Les formulaires dinsertion
et de modification sont
similaires.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

97

Gestion dune table (I)


Quelques actions rapides :
affichage, slection, insertion
dun enregistrement, vidage,
suppression

Proprits des
attributs de la table

Quelques actions
sur les attributs :
modifier, supprimer
; plus les contraintes
: cl primaire et
unique ; et y mettre
un index

Crer une nouvelle


cl sur X attributs
Le CyberZode Qui Frtille

Modifier ou supprimer
plusieurs attributs en
mme temps
http://cyberzoide.developpez.com

Quelques
statistiques et
infos
98

Gestion dune table (II)


Affichage de la version
imprimable de la page

crire une requte excuter


ou spcifier un fichier en
contenant une ou plusieurs

Ajouter X champs dans la table


une position particulire

Rordonner les donnes de


table en fonction dun attribut
Accs au formulaire dinsertion de
donnes dans la table partir dun fichier
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

99

Gestion dune table (III)


Permet dafficher le schma
(structure et/ou donnes) de
la table.
Le schma dune table est
lensemble de la structure et
des donnes dune table.
La structure est compose
de la dfinition des
proprits des attributs et
des cls.
Le rsultat de sortie structure et/ou donnes est constitu des requtes
MySQL de cration de la table et dinsertion des enregistrements.
Le format CSV est un fichier texte dont chaque ligne reprsente un
enregistrement.
Le rsultat peut tre transmis sous la forme dun fichier (qui lui-mme peut
tre compress).
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

100

Gestion dune table (IV)


Dplacer la table
vers une autre base
avec changement
de nom possible
dans la foule

Changer le nom de la table


La copier (avec ou sans les
donnes) vers une autre base avec
changement de nom possible

Quelques oprations de
maintenance : vrification,
analyse, rparation, optimisation
Lui associer un commentaire
Changer le format de la table
La supprimer
Le CyberZode Qui Frtille

Recharger la table en mmoire du serveur


http://cyberzoide.developpez.com

101

Insertion des donnes dans une table


On accde cet
cran var le lien
Insrer des
donnes provenant
d'un fichier texte
dans la table de la
page de gestion de
la table.
Permet dinsrer
des enregistrements
dans une table
partir dun fichier de
donnes au format
CSV.
On peut changer les valeurs par dfaut des
sparateurs standards du CSV.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

102

Cration dune cl
On accde cet
cran var le lien
Crer une clef sur
X colonne(s de la
page de gestion de
la table.
Permet de crer
une cl sur une ou
plusieurs colonnes.
Il faut nommer la cl, en spcifier le type, et les
attributs sur lesquels elle sapplique.
On peut rajouter une autre colonne cette cl avant
de valider lajout de la cl.

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

103

Liens
La rfrence PHP (anglais & franais) :
http://www.php.net
La rfrence MySQL (anglais) :
http://www.mysql.com
Le manuel MySQL traduit en franais ici :
http://dev.nexen.net/docs/
Des cours et articles intressants :
http://www.developpez.com
dont la FAQ PHP & MySQL : http://php.developpez.com/faq/
Loutil phpMyAdmin :
http://phpmyadmin.sourceforge.net

Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

104

Historique
20 juillet 2003 : insertions compltes et tendues ; jointures (105 diapos)
9 mars 2003 : corrections, aide phpMyAdmin (101 diapos)
17 dcembre 2002 : plus dexemples, api php, jointures (90 diapos)
9 dcembre 2002 : premire publication (73 diapos)
5 dcembre 2002 : cration du document par Hugo Etivant (54 diapos)
Remerciement tous ceux qui part leurs suggestions et critiques font
progresser la qualit de ce document.
Ce cours sinspire des ressources suivantes :
" cours de SQL de M. PICHAT (UCBL)
" transparents de Mohand-Sad HACID (LISI, UCBL)
" manuel MySQL (Nexen)
Hugo Etivant
cyberzoide@yahoo.fr
http://cyberzoide.developpez.com/
Le CyberZode Qui Frtille

http://cyberzoide.developpez.com

105

Vous aimerez peut-être aussi