Académique Documents
Professionnel Documents
Culture Documents
Hugo Etivant
Serveur Client
Une relation est un peu une classe (programmation oriente objet) qui ne
possderait que des attributs et donc chaque instance reprsenterait un tuple.
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.
Personnes
On projette la table
Personnes sur les
colonnes nom et prnom.
SELECT nom, prnom
FROM Personnes
nom prnom
Martin Pierre
Dupond Jean
Dupond Marc
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) !
-1.175494351E-38 3.402823466E+38
-3.402823466E+38 1.175494351E-38
0
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.
Exemple :
CREATE TABLE Personne (
nom VARCHAR(40),
prnom VARCHAR(40),
adresse TINYTEXT,
tlphone DECIMAL(10,0)
) SELECT firstname, name, town, tel FROM Users
Personnes
Mauvaise syntaxe :
CREATE TABLE Personne (
nom VARCHAR(40) PRIMARY KEY,
prnom VARCHAR(40) PRIMARY KEY,
adresse TINYTEXT,
tlphone DECIMAL(10,0) Bonne syntaxe :
) 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
Exemple :
tlphone DECIMAL(10,0) DEFAULT 0123456789
Syntaxe :
UNIQUE [nomdelacontrainte](liste des attributs)
Pour interdire les doublons sur lattribut nom mais les interdire aussi sur
prnom, tout en les laissant indpendants :
UNIQUE(nom)
UNIQUE(prnom)
nom prnom
enregistrement interdit
Dupond Marc car Marc est un doublon
Dupont Pierre dans la colonne prnom
Martin Marc
Le CyberZode Qui Frtille 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.
nom prnom
Dupond Marc enregistrement interdit car le
Dupont Pierre couple (Martin, Marc) est un
Martin Marc
doublon du couple (nom,prnom)
Martin Pierre
Martin Marc
Syntaxe :
DROP TABLE relation
Exemple :
DROP TABLE Personnes
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.
Syntaxe :
ALTER TABLE relation DROP attribut
Exemple :
ALTER TABLE Personnes DROP prnom
Syntaxe :
ALTER TABLE relation ADD PRIMARY KEY (attribut)
Exemple :
ALTER TABLE Personnes ADD PRIMARY KEY (nom,prnom)
Syntaxe :
ALTER TABLE relation DROP PRIMARY KEY
Exemple :
ALTER TABLE Personnes ADD PRIMARY KEY
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)
Syntaxe :
ALTER TABLE relation ALTER attribut { SET DEFAULT valeur |
DROP DEFAULT }
Exemple 1 :
ALTER TABLE Personnes MODIFY fax VARCHAR(14)
Exemple 2 :
ALTER TABLE Personnes CHANGE fax num_fax VARCHAR(14)
Exemple :
ALTER TABLE Personnes RENAME Carnet
Syntaxe :
ALTER TABLE relation ADD INDEX index (attributs)
Exemple :
ALTER TABLE Personnes ADD INDEX nom_complet
(nom,prnom)
Exemple :
ALTER TABLE Personnes DROP INDEX nom_complet
Exemple :
INSERT INTO Personnes(nom,prnom) VALUES(Martin,Jean)
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
Exemple :
INSERT INTO Ballon VALUES (20, rouge), (35, vert fluo), (17,
orange), (28, crulen)
Syntaxe :
UPDATE [ LOW_PRORITY ] relation SET attribut=valeur, [
WHERE condition ] [ LIMIT a ]
Exemple :
UPDATE Personnes SET tlphone=0156281469 WHERE
nom=Martin AND prnom = Pierre
Autre exemple :
UPDATE Enfants SET age=age+1
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
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%
Syntaxe :
OPTIMIZE TABLE Relation
Exemple :
OPTIMIZE TABLE Personnes
La jointure devient :
SELECT Personnes.nom, nblivres
FROM Personnes LEFT JOIN Bibliothque
ON Personnes.nom = Bibliothque.nom
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%
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), Retournent respectivement les secondes,
HOUR(x), MONTH(x), minutes, heures, mois, anne et semaine de la
YEAR(x), WEEK(x) 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.
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.
Cet exemple est quivalent au prcdent mais plus court crire. Le symbole
@ (arobase) permet dviter le renvoi de valeur par la fonction quil prcde.
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
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.
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.
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.
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.
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();
}
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
ETAPE 2 : slectionnez le
nom de la base
manipuler (le nombre de ETAPE 1 : crivez le nom de
tables de la base apparat la base de donne crer.
entre parenthses) Puis cliquez sur Crer
Option permettant de
transmettre le schma
sous la forme dun fichier
Supprimer la base
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 95
Affichage dune table
Rappel de la base, de
Rappel de la requte 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
Valeur saisir
Quelques actions
sur les attributs :
modifier, supprimer
; plus les contraintes
: cl primaire et
unique ; et y mettre
un index
Quelques oprations de
maintenance : vrification,
analyse, rparation, optimisation
Loutil phpMyAdmin :
http://phpmyadmin.sourceforge.net
Hugo Etivant
cyberzoide@yahoo.fr
http://cyberzoide.developpez.com/
Le CyberZode Qui Frtille http://cyberzoide.developpez.com 105