Académique Documents
Professionnel Documents
Culture Documents
Mysql
Mysql
Hugo Etivant
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
http://cyberzoide.developpez.com
1
Le CyberZode Qui Frtille
Thorie des
bases de
donnes
http://cyberzoide.developpez.com
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
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).
http://cyberzoide.developpez.com
Projection
Personnes
nom
prnom
adresse
tlphone
Martin
Pierre
Dupond
Jean
32 all Poivrot
0526389152
Dupond
Marc
8 rue de loctet
0123456789
On projette la table
Personnes sur les
colonnes nom et prnom.
nom
prnom
Martin
Pierre
Dupond
Jean
Dupond
Marc
http://cyberzoide.developpez.com
Jointure
Bibliothque
Personnes
nom
Dernierlivre
Dupond
Robinson
32 all Poivrot
Jospin
Faust
Martin
Misre
nom
prnom
adresse
Martin
Pierre
Dupond
Jean
tlphone
0526389152
prnom
Dernierlivre
Jean
Robinson
Pierre
Misre
http://cyberzoide.developpez.com
Slection
Personnes
nom
prnom
adresse
tlphone
Martin
Pierre
Dupond
Jean
32 all Poivrot
0526389152
Dupond
Marc
8 rue de loctet
0123456789
SELECT *
FROM Personnes
WHERE nom = 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
http://cyberzoide.developpez.com
12
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
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
http://cyberzoide.developpez.com
14
longueur
CHAR(M)
CHAR(M) BINARY
VARCHAR(M)
VARCHAR(M) BINARY
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
DECIMAL(M,D)*
http://cyberzoide.developpez.com
15
http://cyberzoide.developpez.com
16
description
DATE
DATETIME
TIMESTAMP
TIMESTAMP(M)
Idem mais M vaut un entier pair entre 2 et 14. Affiche les M premiers
caractres de TIMESTAMP.
TIME
YEAR
nom
description
TIMESTAMP(2)
AA
TIMESTAMP(4)
AAMM
TIMESTAMP(6)
AAMMJJ
TIMESTAMP(8)
AAAAMMJJ
TIMESTAMP(10)
AAMMJJHHMM
TIMESTAMP(12)
AAMMJJHHMMSS
TIMESTAMP(14)
AAAAMMJJHHMMSS
http://cyberzoide.developpez.com
17
description
DATE
DATETIME
TIMESTAMP
TIMESTAMP(M) Idem mais M vaut un entier pair entre 2 et 14. Affiche les M
premiers caractres de TIMESTAMP.
TIME
YEAR
http://cyberzoide.developpez.com
18
http://cyberzoide.developpez.com
19
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
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)
)
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
)
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.
http://cyberzoide.developpez.com
24
http://cyberzoide.developpez.com
25
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
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
http://cyberzoide.developpez.com
30
http://cyberzoide.developpez.com
31
prnom
Dupond
Marc
Dupont
Pierre
Martin
Marc
enregistrement interdit
car Marc est un doublon
dans la colonne prnom
http://cyberzoide.developpez.com
32
nom
prnom
Dupond
Marc
Dupont
Pierre
Martin
Marc
Martin
Pierre
Martin
Marc
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
http://cyberzoide.developpez.com
36
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 !
http://cyberzoide.developpez.com
38
http://cyberzoide.developpez.com
39
nom
prnom
nom
Dupond
Marc
Dupond
Martin
Marc
Martin
Martin
Pierre
Martin
http://cyberzoide.developpez.com
Refus doprer la
suppression, car cela
contredirait la contrainte
dunicit qui resterait sur
lattribut nom.
40
http://cyberzoide.developpez.com
41
http://cyberzoide.developpez.com
42
http://cyberzoide.developpez.com
43
http://cyberzoide.developpez.com
44
http://cyberzoide.developpez.com
45
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.
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.
http://cyberzoide.developpez.com
48
http://cyberzoide.developpez.com
49
http://cyberzoide.developpez.com
50
http://cyberzoide.developpez.com
51
http://cyberzoide.developpez.com
52
http://cyberzoide.developpez.com
53
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
http://cyberzoide.developpez.com
55
http://cyberzoide.developpez.com
56
Description
SELECT
DISTINCT
INTO OUTFILE
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
http://cyberzoide.developpez.com
57
http://cyberzoide.developpez.com
58
Nom
Prenom
Age
Dupond
Pierre
24
Martin
Marc
48
Dupont
Jean
51
Martin
Paul
36
Nom
Dupond
Lionel
68
Dupond
Chirac
Jacques
70
Martin
Dupont
Martin
Gens
Nom
Dupond
Dupond
Chirac
Martin
Dupont
Chirac
http://cyberzoide.developpez.com
59
Dupont
Martin
Gens
Nom
Chirac
Dupond
Gens
Nom
Dupond
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
http://cyberzoide.developpez.com
61
http://cyberzoide.developpez.com
62
Bibliothque
Rsultat de la jointure
Nom
Prnom
Nom
Nblivres
Nom
Nblivres
Martin
Jean
Martine
Tartan
10
Tartan
Pion
Tartan
10
Dupond
Dupond
Jacques
Dupond
http://cyberzoide.developpez.com
63
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
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.
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)
SELECT modle
FROM voitures
WHERE couleur NOT IN (rose, violet)
http://cyberzoide.developpez.com
67
http://cyberzoide.developpez.com
68
Fonctions mathmatiques
Fonction
Description
ABS(x)
Valeur absolue de X.
SIGN(x)
FLOOR(x)
CEILING(x)
ROUND(x)
POW(x,y)
Retourne X la puissance Y.
RAND(), RAND(x)
TRUNCATE(x,y)
SELECT nom
FROM filiales
WHERE SIGN(ca) = -1
ORDER BY RAND()
Le CyberZode Qui Frtille
69
Fonctions de chanes
Fonction
Description
TRIM(x)
LOWER(x)
Converti en minuscules.
UPPER(x)
Converti en majuscules.
LONGUEUR(x)
LOCATE(x,y)
CONCAT(x,y,)
SUBSTRING(s,i,n)
SOUNDEX(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
Description
NOW()
TO_DAYS(x)
DAYOFWEEK(x)
DAYOFMONTH(x)
DAYOFYEAR(x)
SECOND(x), MINUTE(x),
HOUR(x), MONTH(x),
YEAR(x), WEEK(x)
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
Description
SELECT COUNT(*)
FROM client
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.
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.);
}
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
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.
http://cyberzoide.developpez.com
78
http://cyberzoide.developpez.com
79
http://cyberzoide.developpez.com
80
http://cyberzoide.developpez.com
81
http://cyberzoide.developpez.com
82
http://cyberzoide.developpez.com
83
http://cyberzoide.developpez.com
84
Rsultats :
nom
taille
type
drapeaux
table
id
20
int
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
http://cyberzoide.developpez.com
85
http://cyberzoide.developpez.com
86
http://cyberzoide.developpez.com
87
} else {
echo Erreur de base de donnes n.mysql_errno().: .mysql_error();
}
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.
http://cyberzoide.developpez.com
89
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
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
http://cyberzoide.developpez.com
92
ETAPE 2 : slectionnez le
nom de la base
manipuler (le nombre de
tables de la base apparat
entre parenthses)
http://cyberzoide.developpez.com
93
94
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
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
96
Type
http://cyberzoide.developpez.com
97
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
Modifier ou supprimer
plusieurs attributs en
mme temps
http://cyberzoide.developpez.com
Quelques
statistiques et
infos
98
http://cyberzoide.developpez.com
99
http://cyberzoide.developpez.com
100
Quelques oprations de
maintenance : vrification,
analyse, rparation, optimisation
Lui associer un commentaire
Changer le format de la table
La supprimer
Le CyberZode Qui Frtille
101
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.
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
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