SlideShare uma empresa Scribd logo
1 de 32
Implémentation d’une BD 
sur MySQL 
et initiation au SQL 
UCAD/FST/DMI/LPCM 
M. DIENG Abdoulaye Mars 2011
Sommaire 
1. Qu’est ce que MySQL? 
2. Qu’est ce que SQL? 
3. Création et sélection d’une BD 
4. Création d’une table 
Les types de données MySQL 
5. Maintenance d’une table 
6. Insertion de données 
7. Mise à jour et suppression de données 
8. Consultation de données 
9. Droits d’accès aux données
MySQL 
késako? 
• Système de gestion de base de données relationnelles. 
• Logiciel permettant de créer des bases de données, de les 
exploiter (en y effectuant notamment des recherches des 
modifications ou des tris) et de contrôler l’accès aux données. 
• Ses principaux concurrents sont PostgreSQL, MS SQL Server, 
DB2 et Oracle mais ses atouts majeurs sont: 
 performances élevées; 
 coût réduit et accessibilité du code source; 
 simplicité de configuration et d’apprentissage; 
 portabilité; 
 communication aisée avec la plupart des langages de 
programmation (C, C++, VB, C#, PHP, Python, Java, Perl, ...) 
 Wikipedia, Google, Yahoo!, Youtube, Adobe, Airbus, AFP, 
Reuters, BBC News, Alcatel-Lucent utilisent tous MySQL.
MySQL 
historique 
• 1994 : l’entreprise australienne Hugues Technologies développe 
le SGBD mSQL (mini-SQL). 
• Mai 1995 : la société suédoise MySQL AB crée la 1ère version de 
MySQL à partir de mSQL. 
• Juin 2000 : MySQL passe en licence GPL avec sa version 3. 
• Mars 2003 : stabilisation de la version 4 avec le moteur 
transactionnel InnoDB 
• Octobre 2005 : stabilisation de la version 5 et rachat du moteur 
transactionnel InnoDB par Oracle Corporation. 
• Avril 2007 : première version alpha de la version 6 avec 
intégration du moteur transactionnel Falcon (alternative libre 
d’innoDB) 
• Janvier 2008 : rachat de MySQL AB par Sun Microsystems 
• Avril 2009 : rachat de Sun Microsystems par Oracle Corporation 
approuvé en janvier 2010 par la commission européenne.
MySQL 
connexion au serveur 
• MySQL fonctionne en mode client-serveur. 
• Avec EasyPHP, il y a +ieurs manières de se connecter au serveur: 
 en ligne de commande 
1) Lancer la console DOS en cliquant sur exécuter du menu démarrer. 
2) Se mettre sur le répertoire des exécutables de mysql : 
cd C:Program FilesEasyPHP1-8mysqlbin 
3) Taper mysql –u root –h localhost 
pour que le client mysql se connecte au serveur mysql local 
(localhost) avec l’utilisateur root (administrateur) sans mot de passe 
 avec l’interface graphique PhPMyAdmin 
click droit sur l’icône d’EasyPHP>administration>Gestion BDD 
 avec des scripts (écrit en PHP par exemple) 
$id_cnx=mysql_connect('localhost', 'root', '') 
• Dans tous les cas, une fois la connexion au serveur établie, la 
communication se fait avec un langage appelé SQL (Structured 
Query Language)
SQL 
késako? 
• SQL (Structured query language ou langage structuré de 
requêtes) est un pseudo-langage informatique (de type 
requête) standard et normalisé (documenté). 
• SQL est destiné à créer, à manipuler et à contrôler une base 
de données relationnelle avec : 
– un langage de définition de données (LDD); 
– un langage de manipulation de donnée (LMD); 
– un langage de contrôle de données (LCD); 
– un langage de contrôle des transactions (LCT). 
• Ce cours se focalisera sur les trois premiers langages. 
• SQL est adopté par les principaux SGBDR (DB2, Microsoft 
Access, MySQL, PostgreSQL, Oracle, …)
SQL 
historique 
• 1970 : Edgar Codd d’IBM crée le modèle relationnel qui inspira 
le développement du langage SEQUEL (Structured English Query 
Language ou langage d'interrogation structuré en anglais). 
• 1975 : Donald Chamberlain et Raymond Boyce d’IBM 
contractent le SEQUEL en SQL 
• 1986 : première norme SQL1 
• 1992 : SQL2 = SQL1 + de nouvelles instructions (ex : JOIN) 
• 1999 : SQL3 = SQL2 + approche orienté objet 
• 2003 : SQL2003 = SQL3 + quelques modifications mineures 
(ex: SQL/XML) 
• 2008 : SQL2008 = SQL2003 + quelques modifications mineures 
(ex: limitation du nbr de lignes sélectionnées OFFSET/FETCH)
Les identificateurs de MySQL 
• Un identificateur est un nom donné à une base de données, 
une table, un attribut ou un alias. 
• Un identificateur est formé de lettres alphabétiques et de 
chiffres ainsi que du caractère _ (espace souligné) permettant 
une plus grande lisibilité. 
• Il comporte au maximum 64 caractères donc doit être explicite 
• Les bases de données et les tables sont codées directement 
dans le système de fichiers : Windows n’est pas sensible à la 
casse de MySQL, tandis que Unix l’est. 
• Le point « . » est un caractère réservé utilisé comme séparateur 
entre le nom d’une base et celui d’une table ou entre le nom 
d’une table et celui d’un attribut. 
• Eviter d’utiliser les mots réservés du SQL ou du MySQL comme 
identificateur
Création et sélection d’une BD 
• Avec MySQL, les bases de données sont implémentées 
comme des répertoires contenant des fichiers qui 
correspondent aux tables dans les bases de données. 
• Une base de données se crée avec : 
CREATE DATABASE [IF NOT EXISTS] nom_de_la_base; 
• La création d'une base de données ne la sélectionne pas pour 
l'utilisation ; il faut le faire explicitement avec: 
USE nom_de_la_base; 
• Une base de données est détruite par: 
DROP DATABASE [IF EXISTS] nom_de_la_base;
Création d’une table 
syntaxe 
CREATE TABLE [IF NOT EXISTS] nomTable( 
nomAttribut1 typeAttribut1 [NOT NULL][AUTO_INCREMENT], 
nomAttribut2 typeAttribut2 [NOT NULL], 
… 
PRIMARY KEY(nomattribut1[,nomattribut2, …]) ); 
• NOT NULL force l’attribut à prendre une valeur de son domaine. 
• AUTO_INCREMENT s’applique à un entier qui sera augmenté de 
1 à chaque nouvelle insertion. 
• PRIMARY KEY : précise la ou les colonnes composant la clef 
primaire (identifiant unique) de la table. 
ATTENTION : nécessite que chaque colonne concourant à la clef 
soit NOT NULL.
Création d’une table 
avec une clé étrangère 
• On appelle « clé étrangère » (foreign key) une colonne ou une 
combinaison de colonnes utilisée pour établir et conserver une 
liaison entre les données de deux tables. 
• Avec MySQL, les deux tables doivent être de type InnoDB. 
• Exemple : 
CREATE TABLE parent(id_p INT NOT NULL, nom_p VARCHAR(20) 
prenom_p VARCHAR(20),PRIMARY KEY(id_p)) TYPE=INNODB; 
CREATE TABLE fille(id_f INT, parent_id INT, prenom_f VARCHAR(20) 
PRIMARY KEY (id_f), FOREIGN KEY (parent_id) REFERENCES parent(id_p) 
ON DELETE CASCADE ON UPDATE CASCADE 
) TYPE=INNODB; 
• ON DELETE CASCADE (resp. ON UPDATE CASCADE) indique qu'en 
cas de suppression (resp. modification) d'une ligne de la table 
parente, InnoDB va automatiquement effacer (resp. modifier) 
toute les lignes de la table fille qui sont liées à cette ligne.
Création d’une table 
Types de données MySQL (les petits entiers) 
• TINYINT[(M)] [UNSIGNED] [ZEROFILL] 1 octet 
Très petits entiers signés [ -128 ; 127] 
ou non-signés [ 0 ; 255] 
• SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 2 octets 
Petits entiers signés [ -32 768 ; 32 767] 
ou non-signés [ 0 ; 65 535] 
M indique la taille de l’affichage. 
UNSIGNED accepte uniquement des nombres positif. 
ZEROFILL permet d'ajouter éventuellement des zéros (à 
gauche) à l'affichage pour avoir le nombre de caractères 
spécifié par M. 
En spécifiant ZEROFILL pour une colonne, MySQL ajoutera 
automatiquement l'attribut UNSIGNED à la colonne.
Création d’une table 
Types de données MySQL (les entiers) 
• MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 3 octets 
Entiers signés [-8 388 608 ; 8 388 607] 
ou non-signés [ 0 ; 16 777 215] 
• INT[(M)] [UNSIGNED] [ZEROFILL] 4 octets 
Grands entiers signés [-2 147 483 648 ; 2 147 483 647] 
ou non-signés [ 0 ; 4 294 967 295] 
• BIGINT[(M)] [UNSIGNED] [ZEROFILL] 8 octets 
Très grands entiers 
signés [-9 223 372 036 854 775 808 ; 
9 223 372 036 854 775 807 ] 
ou non-signés [ 0 ; 18 446 744 073 709 551 615 ]
Création d’une table 
Types de données MySQL (les réels) 
• FLOAT(précision) [ZEROFILL] 4 ou 8 oct 
Nombre à virgule flottante avec 
simple précision (si précision <=24) 
ou double précision (si précision est entre 25 et 53). 
• FLOAT[(M,D)] [ZEROFILL] 4 octets 
Nombre à virgule flottante, en précision simple. 
Les valeurs possibles vont de 
-3.402823466E+38 à 3.402823466E+38. 
M indique la taille de l'affichage 
D est le nombre de décimales.
Création d’une table 
Types de données MySQL (les réels) 
• DOUBLE[(M,D)] [ZEROFILL] 8 octets 
Nombre à virgule flottante, en précision double. 
Les valeurs possibles vont de 
-1.7976931348623157E+308 à 1.7976931348623157E+308. 
• DECIMAL[(M[,D])] [ZEROFILL] 
Nombres à virgule flottante stockés comme des chaînes de 
caractères. 
Occupe M+2 octets si D > 0, M+1 octets si D = 0
Création d’une table 
Types de données MySQL (le temps) 
• DATE 3 octets 
Stocke une date au format 'AAAA-MM-JJ' 
allant de '1000-01-01' à '9999-12-31‘ 
• DATETIME 8 octets 
Stocke une date et une heure au format 
'AAAA-MM-JJ HH:MM:SS' allant de 
'1000-01-01 00:00:00' à '9999-12-31 23:59:59'
Création d’une table 
Types de données MySQL (le temps) 
• TIMESTAMP [M] 4 octets 
Stocke une date sous forme numérique allant de 
'1970-01-01 00:00:00' à l'année 2037. 
L'affichage dépend des valeurs de M : AAAAMMJJHHMMSS, 
AAMMJJHHMMSS, AAAAMMJJ, ou AAMMJJ pour M égal 
respectivement à 14 (ou absent), 12, 8, et 6 
• TIME 3 octets 
Stocke l'heure au format 'HH:MM:SS', 
allant de '-838:59:59' à '838:59:59‘ 
• YEAR[(4|2)] 1 octet 
Stocke l’année à 4 (par défaut) ou 2 chiffres allant de 1901 à 
2155 ( 4 chiffres) et de 1970-2069 (2 chiffres).
Création d’une table 
Types de données MySQL (les caractères) 
• CHAR (M) [BINARY] 
Stocke une chaîne de caractère de taille fixe M (de 0 à 255). 
BINARY permet de tenir compte de la casse. 
• VARCHAR (M) [BINARY] 
Stocke des chaînes de 255 caractères maximum. 
Économise de l’espace mémoire mais ralentit la recherche. 
• TINYBLOB et TINYTEXT 
Stockent des fichiers ou du texte de 255 caractères maximum. 
Le 1er aura un contenu de type binaire (sensible à la casse) 
Le 2nd aura un contenu de type ASCII (insensible à la casse) 
• BLOB et TEXT 
Stockent des fichiers ou du texte de 65 535 caractères 
maximum.
Création d’une table 
Types de données MySQL (les caractères) 
• MEDIUMBLOB et MEDIUMTEXT 
Stockent des fichiers ou du texte de 16 777 215 caractères 
maximum. 
• LONGBLOB et LONGTEXT 
Stockent des fichiers ou du texte de 4 294 967 295 caractères 
maximum. 
• ENUM('valeur_possible1','valeur_possible2', ...) 
Énumération de valeurs. Une valeur parmi 65535. 
• SET('valeur_possible1','valeur_possible2', ...) 
Ensemble de valeurs. Une ou plusieurs valeurs parmi 64. 
• NB 1 : On peut donc associer ENUM aux champs de 
type radio , et SET aux champs de type checkbox; 
• NB 2 : Ces deux types peuvent contenir des valeurs null.
Maintenance d’une table 
• Suppression de table : 
DROP TABLE nom_table; 
• Ajouter un attribut : 
ALTER TABLE nom_table ADD definition [First|After attribut] 
• Supprimer un attribut : 
ALTER TABLE nom_table DROP attribut 
• Modifier la définition d’un attribut: 
ALTER TABLE nom_table ALTER attribut nouvelle_definiton 
• Changer la valeur par défaut d’un attribut: 
ALTER TABLE nom_table ALTER attribut {SET DEFAULT valeur} 
• Créer une clé primaire : 
ALTER TABLE nom_table ADD PRIMARY KEY (attribut) 
• Supprimer une clé primaire : 
ALTER TABLE nom_table DROP PRIMARY KEY
Insertion de données 
INSERT INTO nom_table 
[(nomattribut1,...,nomattributN)] 
VALUES (valeur1,...,valeurN), 
[(autre_valeur1,...,autre_valeurN)]; 
• Les attributs qui ne sont pas mentionnés prendront 
leur valeur par défaut. 
• Si les noms d’attributs sont omis il faut fournir une 
valeur pour toute les colonnes dans l'ordre dans 
lequel elle ont été spécifiées lors de la création de la 
table. 
• Les valeurs chaînes de caractère sont entre '…'.
Màj et suppression de données 
• Syntaxe de mise à jour de données: 
UPDATE nom_table 
SET nom_col1=new_valeur1, nom_col2=new_valeur2, … 
[WHERE prédicat] 
• Syntaxe de suppression de données 
DELETE FROM nom_table 
[WHERE prédicat] 
• WHERE ,clause de filtre, introduit un prédicat (1 ou +sieurs 
expressions conditionnelles) pour spécifier les enregistrements 
à modifier ou à supprimer. 
• ATTENTION : Si WHERE est omise, les modif. ou suppressions 
sont appliquées à la totalité des enregistrements de la table.
consultation de données 
syntaxe 
SELECT [DISTINCT] * ou liste_de_champs (séparés par ,) 
FROM nom_table [WHERE prédicat] 
[GROUP BY critère_de_regroupement 
HAVING prédicat] 
[ORDER BY liste_de_colonnes (séparés par ,)] 
[LIMIT nbr_de_lignes_à_retourner [OFFSET nbr_lignes_à_ignorer]] 
• * sélectionne tous les champs de la table 
• DISTINCT élimine les doublons dans le résultat 
• WHERE introduit un prédicat pour spécifier les enregistrements 
à sélectionner. 
• GROUP BY permet de définir des regroupements 
d’enregistrements afin d’effectuer des calculs statistiques. 
• HAVING (filtre après sélection) spécifie un prédicat sur des 
groupes d'enregistrements générés par la clause GROUP BY ou 
des fonctions d’agrégat.
consultation de données 
syntaxe(suite et fin) 
• ORDER BY permet de trier (ASC par défaut ou DESC) les lignes du 
résultat en fonction d’une ou ide +sieurs colonne(s) listée(s) dans 
la SELECT. 
• LIMIT et OFFSET permettent de ne récupérer qu'une partie des 
lignes engendrées par le reste de la requête. 
• LIMIT spécifie le nombre de lignes à retourner depuis le début du 
jeu de résultat. 
• OFFSET indique le nombre de lignes à ignorer depuis le début du 
jeu de résultat. 
• Lors de l'utilisation de LIMIT, il est nécessaire d'utiliser une 
clause ORDER BY contraignant les lignes résultantes dans un 
ordre unique. 
• LIMIT et OFFSET sont très utiles pour afficher un catalogue 
volumineux en plusieurs pages.
consultation de données 
prédicat (1/2) 
Pour exprimer un prédicat on peut utiliser: 
• les opérateurs arithmétiques : +,-,*,/,% ; 
• les opérateurs booléens : AND, OR, NOT ; 
• les opérateurs de comparaison : =, != (ou < >), <, >, <=, >= ; 
• IS [ NOT ] NULL pour tester si la valeur est NULL (vide) ou 
non; 
• [ NOT ] EXIST ( SELECT ... ) pour tester si la sélection renvoi 
quelque chose ou non; 
• [ NOT ] BETWEEN val_1 AND val_2 pour tester si la valeur est 
entre val_1 et val_2 (incluses)
consultation de données 
prédicat (2/2) 
• [ NOT ] IN (var_1, var_2, ...) / [ NOT ] IN ( SELECT ... ) pour 
tester si la variable est dans la liste/sous-requête 
• operateur ALL (var_1, var_2, ...) / operateur ALL ( SELECT ... ) 
pour tester si la valeur est <, >, <=, >= à toutes les valeurs de la 
liste/sous-requête 
• operateur ANY (var_1, var_2, ...) / operateur ANY ( SELECT ... ) 
pour tester si la valeur est <, >, <=, >= à au moins une valeur de 
la liste/sous-requête 
• [ NOT ] LIKE '%chaîne_%' pour tester si la variable ressemble 
ou non à la chaîne 
– '%' remplace une chaîne 
– '_' remplace un caractère
consultation de données 
fonctions d’agrégat 
• SELECT COUNT(*) FROM nom_table 
Compte le nombre d’enregistrement de nom_table 
– count(*) : compte aussi les valeurs NULL (vide) ; 
– count(attribut) : compte seulement les valeurs non NULL ; 
– count(distinct attribut) : une valeur est comptée une seule fois 
• SELECT MAX(attribut) FROM nom_table 
Renvoie La valeur la plus grande de l’attribut spécifié 
• SELECT MIN(attribut) FROM nom_table 
Renvoie La valeur la plus petite de l’attribut spécifié 
• SELECT AVG(attribut) FROM nom_table 
Renvoie la moyenne sur toutes les valeurs de l’attribut spécifié 
• SELECT SUM(attribut) FROM nom_table 
Renvoie la somme de toutes les valeurs de l’attribut spécifié.
consultation de données 
jointure 
• Une jointure consiste à faire une sélection de données sur 
plusieurs tables. 
• Les tables concernées doivent avoir chacune au moins une 
colonne contenant un même type d’information 
• Syntaxe: 
SELECT col1, t1.col2 [AS] alias1col2, 
t2.col2 [AS] alias2col2, col3, col4, ... 
FROM table1 [AS] t1, table2 [AS] t2, ... 
WHERE prédicat_de_jointure 
• La condition de jointure est de la forme : 
table1.colX = table2.colY ou t1.colX=t2.colY 
dans laquelle colX et colY contiennent des données 
représentant la même information 
• Utiliser éventuellement et optionnellement le mot clé AS 
pour renommer des colonnes ou des tables lors de la 
sélection.
consultation de données 
jointure avec JOIN 
• Un prédicat de jointure faite dans la clause WHERE ne permet 
pas de faire la distinction entre ce qui relève du filtrage 
(restriction) et ce qui relève de la jointure (extension). 
• D’où une autre syntaxe de la jointure : 
SELECT col1, t1.col2 [AS] alias1col2, 
t2.col2 [AS] alias2col2, col3, col4, … 
FROM table1 [AS] t1 
[INNER]JOIN table2 [AS] t2, … 
ON prédicat_de_jointure ou bien USING (colonne(s) de jointure) 
WHERE prédicat_de_filtre 
• Le mot clef INNER (facultatif) désigne que seules les lignes 
comportant une valeur qui existe dans toutes les tables jointes 
seront incluses dans les opérations de la requête.
consultation de données 
jointure externe 
• La jointure externe permet de prendre aussi en compte, dans 
le résultat, les lignes qui n’ont pas de valeur sur les colonnes 
de jointure. 
• Syntaxe: 
SELECT col1, t1.col2 [AS] alias1col2, 
t2.col2 [AS] alias2col2, col3, col4, … 
FROM table1 [AS] t1 
LEFT | RIGHT | FULL [OUTER] JOIN table2 [AS] t2, … 
ON prédicat_de_jointure ou USING (colonne(s) de jointure) 
WHERE prédicat_de_filtre 
• Les mots clefs LEFT, RIGHT et FULL indiquent la manière dont 
le moteur de requête doit effectuer la jointure externe. 
• LEFT/RIGHT -> la table située à gauche/droite du mot 
clef JOIN 
• FULL indique que la jointure externe est bilatérale.
consultation de données 
jointure externe (exemple) 
• Supposons qu’on rajoute les ethnies « Soussou » et 
« Bambara » dans la table « ethnies » et que l’on souhaite 
afficher les ethnies qui n’ont pas de membre dans la table 
« personnes ». 
• On rappelle que les tables « ethnies » et « personnes » sont 
liées 
• La requête à exécuter est la suivante : 
SELECT e.nom AS ethnies_pas_representees 
FROM ethnies AS e 
LEFT JOIN personnes AS p 
USING (id_eth) 
WHERE p.id_eth is NULL
Droits d’accès aux données 
• Syntaxe pour donner des privilèges : 
GRANT droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] 
ON {nom_de_table | * | nom_base.*} 
TO nom_utilisateur1 [IDENTIFIED BY 'password'] 
[, nom_utilisateur2 [IDENTIFIED BY 'password'] ...] 
[WITH GRANT OPTION]; 
• Les droits sur une table sont SELECT , INSERT , UPDATE , DELETE , 
CREATE , DROP , GRANT OPTION , INDEX et ALTER . 
• Les droits sur une colonne sont SELECT , INSERT et UPDATE . 
• Si une base est sélectionnée, ON * donne des droits sur elle. 
• Si aucune base n’est sélectionnée, ON * affecte les droits sur le serveur 
• nom_utilisateur est généralement sous la forme user@'host' 
• La clause WITH GRANT OPTION, est utilisée pour autoriser la 
transmission des droits. 
• Syntaxe pour supprimer des privilèges : 
REVOKE droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] 
ON {nom_de_table | * |nom_base.*} 
FROM nom_utilisateur1 [, nom_utilisateur2 ...]

Mais conteúdo relacionado

Mais procurados

Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
Administration Reseau
Administration ReseauAdministration Reseau
Administration Reseaudenischef1
 
Présentation de Thèse
Présentation de ThèsePrésentation de Thèse
Présentation de ThèseLilia Sfaxi
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOALilia Sfaxi
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesLilia Sfaxi
 
Examen principal - PHP
Examen principal - PHPExamen principal - PHP
Examen principal - PHPInes Ouaz
 
SQL Queries - DDL Commands
SQL Queries - DDL CommandsSQL Queries - DDL Commands
SQL Queries - DDL CommandsShubhamBauddh
 
Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008MRamo2s
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataLilia Sfaxi
 
Architecture des Systèmes Logiciels
Architecture des Systèmes LogicielsArchitecture des Systèmes Logiciels
Architecture des Systèmes LogicielsGhazouani Mahdi
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement webHouda TOUKABRI
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.pptIdriss22
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcminfcom
 
Polycop td access 2007 facturation
Polycop td access 2007  facturationPolycop td access 2007  facturation
Polycop td access 2007 facturationgkaterynne
 

Mais procurados (20)

Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Administration Reseau
Administration ReseauAdministration Reseau
Administration Reseau
 
Présentation de Thèse
Présentation de ThèsePrésentation de Thèse
Présentation de Thèse
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Chp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOAChp1- Introduction aux Technologies Web et SOA
Chp1- Introduction aux Technologies Web et SOA
 
Chp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées ServicesChp2 - Vers les Architectures Orientées Services
Chp2 - Vers les Architectures Orientées Services
 
Examen principal - PHP
Examen principal - PHPExamen principal - PHP
Examen principal - PHP
 
SQL Queries - DDL Commands
SQL Queries - DDL CommandsSQL Queries - DDL Commands
SQL Queries - DDL Commands
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008Jp perez correction quizz oracle mairie de paris acma 2007 2008
Jp perez correction quizz oracle mairie de paris acma 2007 2008
 
Injection sql
Injection sqlInjection sql
Injection sql
 
Uml classes Par les exemples
Uml classes Par les exemplesUml classes Par les exemples
Uml classes Par les exemples
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
Architecture des Systèmes Logiciels
Architecture des Systèmes LogicielsArchitecture des Systèmes Logiciels
Architecture des Systèmes Logiciels
 
Fascicule de tp atelier développement web
Fascicule de tp atelier développement webFascicule de tp atelier développement web
Fascicule de tp atelier développement web
 
Plsql
PlsqlPlsql
Plsql
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.ppt
 
T1 corrections-qcm
T1 corrections-qcmT1 corrections-qcm
T1 corrections-qcm
 
Polycop td access 2007 facturation
Polycop td access 2007  facturationPolycop td access 2007  facturation
Polycop td access 2007 facturation
 

Destaque

HTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsHTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsRémy Savard
 
Merise exercices-mcd_corriges
Merise  exercices-mcd_corrigesMerise  exercices-mcd_corriges
Merise exercices-mcd_corrigesMehdi El
 
Formation MySQL Workbench
Formation MySQL WorkbenchFormation MySQL Workbench
Formation MySQL WorkbenchIsenDev
 
L'art de la typographie, d'illustrator à InDesign
L'art de la typographie, d'illustrator à InDesignL'art de la typographie, d'illustrator à InDesign
L'art de la typographie, d'illustrator à InDesignFranck Payen
 
Création d’application facile en html via node-webkit
Création d’application facile en html via node-webkitCréation d’application facile en html via node-webkit
Création d’application facile en html via node-webkitIsenDev
 
NOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQLNOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQLRamakant Soni
 
Panorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans AzurePanorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans AzureMicrosoft Technet France
 
T P
T PT P
T PADB2
 
Initiation au C++
Initiation au C++Initiation au C++
Initiation au C++IsenDev
 
Quand partager sur les réseaux sociaux ?
Quand partager sur les réseaux sociaux ?Quand partager sur les réseaux sociaux ?
Quand partager sur les réseaux sociaux ?Serge Esteves
 
Stratégie de réseaux sociaux pour les entrepreneurs
Stratégie de réseaux sociaux pour les entrepreneursStratégie de réseaux sociaux pour les entrepreneurs
Stratégie de réseaux sociaux pour les entrepreneursPierre Tran
 
Test unitaire
Test unitaireTest unitaire
Test unitaireIsenDev
 
SGBDR - MySQL
SGBDR - MySQLSGBDR - MySQL
SGBDR - MySQLMusatge
 
Communication et le luxe
Communication et le luxeCommunication et le luxe
Communication et le luxePMB Com SA
 
Dynamiser son identité numérique sur les réseaux sociaux
Dynamiser son identité numérique sur les réseaux sociauxDynamiser son identité numérique sur les réseaux sociaux
Dynamiser son identité numérique sur les réseaux sociauxAntoine Périgne
 
Cours Base de Données
Cours Base de DonnéesCours Base de Données
Cours Base de Donnéesyassine kchiri
 
Personnal branding et profil LinkedIn
Personnal branding et profil LinkedInPersonnal branding et profil LinkedIn
Personnal branding et profil LinkedInLinkedIn
 
Qu'est-ce que LinkedIn ? Comment l'utiliser ?
Qu'est-ce que LinkedIn ? Comment l'utiliser ?Qu'est-ce que LinkedIn ? Comment l'utiliser ?
Qu'est-ce que LinkedIn ? Comment l'utiliser ?Samuel Robert
 

Destaque (20)

Le sql pour les nuls
Le sql pour les nulsLe sql pour les nuls
Le sql pour les nuls
 
HTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux élémentsHTML5 - Sémantique, structure et nouveaux éléments
HTML5 - Sémantique, structure et nouveaux éléments
 
Merise exercices-mcd_corriges
Merise  exercices-mcd_corrigesMerise  exercices-mcd_corriges
Merise exercices-mcd_corriges
 
SQL Server
SQL ServerSQL Server
SQL Server
 
Formation MySQL Workbench
Formation MySQL WorkbenchFormation MySQL Workbench
Formation MySQL Workbench
 
L'art de la typographie, d'illustrator à InDesign
L'art de la typographie, d'illustrator à InDesignL'art de la typographie, d'illustrator à InDesign
L'art de la typographie, d'illustrator à InDesign
 
Création d’application facile en html via node-webkit
Création d’application facile en html via node-webkitCréation d’application facile en html via node-webkit
Création d’application facile en html via node-webkit
 
NOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQLNOSQL- Presentation on NoSQL
NOSQL- Presentation on NoSQL
 
Panorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans AzurePanorama des offres NoSQL disponibles dans Azure
Panorama des offres NoSQL disponibles dans Azure
 
T P
T PT P
T P
 
Initiation au C++
Initiation au C++Initiation au C++
Initiation au C++
 
Quand partager sur les réseaux sociaux ?
Quand partager sur les réseaux sociaux ?Quand partager sur les réseaux sociaux ?
Quand partager sur les réseaux sociaux ?
 
Stratégie de réseaux sociaux pour les entrepreneurs
Stratégie de réseaux sociaux pour les entrepreneursStratégie de réseaux sociaux pour les entrepreneurs
Stratégie de réseaux sociaux pour les entrepreneurs
 
Test unitaire
Test unitaireTest unitaire
Test unitaire
 
SGBDR - MySQL
SGBDR - MySQLSGBDR - MySQL
SGBDR - MySQL
 
Communication et le luxe
Communication et le luxeCommunication et le luxe
Communication et le luxe
 
Dynamiser son identité numérique sur les réseaux sociaux
Dynamiser son identité numérique sur les réseaux sociauxDynamiser son identité numérique sur les réseaux sociaux
Dynamiser son identité numérique sur les réseaux sociaux
 
Cours Base de Données
Cours Base de DonnéesCours Base de Données
Cours Base de Données
 
Personnal branding et profil LinkedIn
Personnal branding et profil LinkedInPersonnal branding et profil LinkedIn
Personnal branding et profil LinkedIn
 
Qu'est-ce que LinkedIn ? Comment l'utiliser ?
Qu'est-ce que LinkedIn ? Comment l'utiliser ?Qu'est-ce que LinkedIn ? Comment l'utiliser ?
Qu'est-ce que LinkedIn ? Comment l'utiliser ?
 

Semelhante a introduction au SQL et MySQL

resume-theorique-m106-partie3-0903-1-622f07613b825.pdf
resume-theorique-m106-partie3-0903-1-622f07613b825.pdfresume-theorique-m106-partie3-0903-1-622f07613b825.pdf
resume-theorique-m106-partie3-0903-1-622f07613b825.pdfFootballLovers9
 
INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3PGambette
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdftepoha4848
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfRihabBENLAMINE
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerMicrosoft
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants SmartnSkilled
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBRomain Cambien
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQLAntoine Augusti
 
My sql
My sqlMy sql
My sqlhajaar
 

Semelhante a introduction au SQL et MySQL (20)

4-TP BD.pptx
4-TP BD.pptx4-TP BD.pptx
4-TP BD.pptx
 
resume-theorique-m106-partie3-0903-1-622f07613b825.pdf
resume-theorique-m106-partie3-0903-1-622f07613b825.pdfresume-theorique-m106-partie3-0903-1-622f07613b825.pdf
resume-theorique-m106-partie3-0903-1-622f07613b825.pdf
 
MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3INF240 - Bases de données DUT SRC1 - Cours 3
INF240 - Bases de données DUT SRC1 - Cours 3
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
Le langage sql
Le langage sqlLe langage sql
Le langage sql
 
Base donnee MYSQL
Base donnee MYSQLBase donnee MYSQL
Base donnee MYSQL
 
Sql
SqlSql
Sql
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
 
presentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdfpresentationatelierphpprt2-140314143938-phpapp02.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdf
 
La 2ème partie de la présentation PHP
La 2ème partie de la présentation PHPLa 2ème partie de la présentation PHP
La 2ème partie de la présentation PHP
 
SQL.pdf
SQL.pdfSQL.pdf
SQL.pdf
 
Les05.ppt
Les05.pptLes05.ppt
Les05.ppt
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL Server
 
Mariadb une base de données NewSQL
Mariadb une base de données NewSQLMariadb une base de données NewSQL
Mariadb une base de données NewSQL
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQL
 
My sql
My sqlMy sql
My sql
 
My sql
My sqlMy sql
My sql
 

Mais de Abdoulaye Dieng

Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturelAbdoulaye Dieng
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobilesAbdoulaye Dieng
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPressAbdoulaye Dieng
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API RESTAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonAbdoulaye Dieng
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JSAbdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchronesAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 

Mais de Abdoulaye Dieng (20)

Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Fondamentaux du Référencement naturel
Fondamentaux du Référencement naturelFondamentaux du Référencement naturel
Fondamentaux du Référencement naturel
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
 
Prise en main de WordPress
Prise en main de WordPressPrise en main de WordPress
Prise en main de WordPress
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
Introduction à Angular
Introduction à AngularIntroduction à Angular
Introduction à Angular
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Introduction à l’orienté objet en Python
Introduction à l’orienté objet en PythonIntroduction à l’orienté objet en Python
Introduction à l’orienté objet en Python
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Initiation à Bootstrap
Initiation à BootstrapInitiation à Bootstrap
Initiation à Bootstrap
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Introduction à jQuery
Introduction à jQueryIntroduction à jQuery
Introduction à jQuery
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 

introduction au SQL et MySQL

  • 1. Implémentation d’une BD sur MySQL et initiation au SQL UCAD/FST/DMI/LPCM M. DIENG Abdoulaye Mars 2011
  • 2. Sommaire 1. Qu’est ce que MySQL? 2. Qu’est ce que SQL? 3. Création et sélection d’une BD 4. Création d’une table Les types de données MySQL 5. Maintenance d’une table 6. Insertion de données 7. Mise à jour et suppression de données 8. Consultation de données 9. Droits d’accès aux données
  • 3. MySQL késako? • Système de gestion de base de données relationnelles. • Logiciel permettant de créer des bases de données, de les exploiter (en y effectuant notamment des recherches des modifications ou des tris) et de contrôler l’accès aux données. • Ses principaux concurrents sont PostgreSQL, MS SQL Server, DB2 et Oracle mais ses atouts majeurs sont:  performances élevées;  coût réduit et accessibilité du code source;  simplicité de configuration et d’apprentissage;  portabilité;  communication aisée avec la plupart des langages de programmation (C, C++, VB, C#, PHP, Python, Java, Perl, ...)  Wikipedia, Google, Yahoo!, Youtube, Adobe, Airbus, AFP, Reuters, BBC News, Alcatel-Lucent utilisent tous MySQL.
  • 4. MySQL historique • 1994 : l’entreprise australienne Hugues Technologies développe le SGBD mSQL (mini-SQL). • Mai 1995 : la société suédoise MySQL AB crée la 1ère version de MySQL à partir de mSQL. • Juin 2000 : MySQL passe en licence GPL avec sa version 3. • Mars 2003 : stabilisation de la version 4 avec le moteur transactionnel InnoDB • Octobre 2005 : stabilisation de la version 5 et rachat du moteur transactionnel InnoDB par Oracle Corporation. • Avril 2007 : première version alpha de la version 6 avec intégration du moteur transactionnel Falcon (alternative libre d’innoDB) • Janvier 2008 : rachat de MySQL AB par Sun Microsystems • Avril 2009 : rachat de Sun Microsystems par Oracle Corporation approuvé en janvier 2010 par la commission européenne.
  • 5. MySQL connexion au serveur • MySQL fonctionne en mode client-serveur. • Avec EasyPHP, il y a +ieurs manières de se connecter au serveur:  en ligne de commande 1) Lancer la console DOS en cliquant sur exécuter du menu démarrer. 2) Se mettre sur le répertoire des exécutables de mysql : cd C:Program FilesEasyPHP1-8mysqlbin 3) Taper mysql –u root –h localhost pour que le client mysql se connecte au serveur mysql local (localhost) avec l’utilisateur root (administrateur) sans mot de passe  avec l’interface graphique PhPMyAdmin click droit sur l’icône d’EasyPHP>administration>Gestion BDD  avec des scripts (écrit en PHP par exemple) $id_cnx=mysql_connect('localhost', 'root', '') • Dans tous les cas, une fois la connexion au serveur établie, la communication se fait avec un langage appelé SQL (Structured Query Language)
  • 6. SQL késako? • SQL (Structured query language ou langage structuré de requêtes) est un pseudo-langage informatique (de type requête) standard et normalisé (documenté). • SQL est destiné à créer, à manipuler et à contrôler une base de données relationnelle avec : – un langage de définition de données (LDD); – un langage de manipulation de donnée (LMD); – un langage de contrôle de données (LCD); – un langage de contrôle des transactions (LCT). • Ce cours se focalisera sur les trois premiers langages. • SQL est adopté par les principaux SGBDR (DB2, Microsoft Access, MySQL, PostgreSQL, Oracle, …)
  • 7. SQL historique • 1970 : Edgar Codd d’IBM crée le modèle relationnel qui inspira le développement du langage SEQUEL (Structured English Query Language ou langage d'interrogation structuré en anglais). • 1975 : Donald Chamberlain et Raymond Boyce d’IBM contractent le SEQUEL en SQL • 1986 : première norme SQL1 • 1992 : SQL2 = SQL1 + de nouvelles instructions (ex : JOIN) • 1999 : SQL3 = SQL2 + approche orienté objet • 2003 : SQL2003 = SQL3 + quelques modifications mineures (ex: SQL/XML) • 2008 : SQL2008 = SQL2003 + quelques modifications mineures (ex: limitation du nbr de lignes sélectionnées OFFSET/FETCH)
  • 8. Les identificateurs de MySQL • Un identificateur est un nom donné à une base de données, une table, un attribut ou un alias. • Un identificateur est formé de lettres alphabétiques et de chiffres ainsi que du caractère _ (espace souligné) permettant une plus grande lisibilité. • Il comporte au maximum 64 caractères donc doit être explicite • Les bases de données et les tables sont codées directement dans le système de fichiers : Windows n’est pas sensible à la casse de MySQL, tandis que Unix l’est. • Le point « . » est un caractère réservé utilisé comme séparateur entre le nom d’une base et celui d’une table ou entre le nom d’une table et celui d’un attribut. • Eviter d’utiliser les mots réservés du SQL ou du MySQL comme identificateur
  • 9. Création et sélection d’une BD • Avec MySQL, les bases de données sont implémentées comme des répertoires contenant des fichiers qui correspondent aux tables dans les bases de données. • Une base de données se crée avec : CREATE DATABASE [IF NOT EXISTS] nom_de_la_base; • La création d'une base de données ne la sélectionne pas pour l'utilisation ; il faut le faire explicitement avec: USE nom_de_la_base; • Une base de données est détruite par: DROP DATABASE [IF EXISTS] nom_de_la_base;
  • 10. Création d’une table syntaxe CREATE TABLE [IF NOT EXISTS] nomTable( nomAttribut1 typeAttribut1 [NOT NULL][AUTO_INCREMENT], nomAttribut2 typeAttribut2 [NOT NULL], … PRIMARY KEY(nomattribut1[,nomattribut2, …]) ); • NOT NULL force l’attribut à prendre une valeur de son domaine. • AUTO_INCREMENT s’applique à un entier qui sera augmenté de 1 à chaque nouvelle insertion. • PRIMARY KEY : précise la ou les colonnes composant la clef primaire (identifiant unique) de la table. ATTENTION : nécessite que chaque colonne concourant à la clef soit NOT NULL.
  • 11. Création d’une table avec une clé étrangère • On appelle « clé étrangère » (foreign key) une colonne ou une combinaison de colonnes utilisée pour établir et conserver une liaison entre les données de deux tables. • Avec MySQL, les deux tables doivent être de type InnoDB. • Exemple : CREATE TABLE parent(id_p INT NOT NULL, nom_p VARCHAR(20) prenom_p VARCHAR(20),PRIMARY KEY(id_p)) TYPE=INNODB; CREATE TABLE fille(id_f INT, parent_id INT, prenom_f VARCHAR(20) PRIMARY KEY (id_f), FOREIGN KEY (parent_id) REFERENCES parent(id_p) ON DELETE CASCADE ON UPDATE CASCADE ) TYPE=INNODB; • ON DELETE CASCADE (resp. ON UPDATE CASCADE) indique qu'en cas de suppression (resp. modification) d'une ligne de la table parente, InnoDB va automatiquement effacer (resp. modifier) toute les lignes de la table fille qui sont liées à cette ligne.
  • 12. Création d’une table Types de données MySQL (les petits entiers) • TINYINT[(M)] [UNSIGNED] [ZEROFILL] 1 octet Très petits entiers signés [ -128 ; 127] ou non-signés [ 0 ; 255] • SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 2 octets Petits entiers signés [ -32 768 ; 32 767] ou non-signés [ 0 ; 65 535] M indique la taille de l’affichage. UNSIGNED accepte uniquement des nombres positif. ZEROFILL permet d'ajouter éventuellement des zéros (à gauche) à l'affichage pour avoir le nombre de caractères spécifié par M. En spécifiant ZEROFILL pour une colonne, MySQL ajoutera automatiquement l'attribut UNSIGNED à la colonne.
  • 13. Création d’une table Types de données MySQL (les entiers) • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 3 octets Entiers signés [-8 388 608 ; 8 388 607] ou non-signés [ 0 ; 16 777 215] • INT[(M)] [UNSIGNED] [ZEROFILL] 4 octets Grands entiers signés [-2 147 483 648 ; 2 147 483 647] ou non-signés [ 0 ; 4 294 967 295] • BIGINT[(M)] [UNSIGNED] [ZEROFILL] 8 octets Très grands entiers signés [-9 223 372 036 854 775 808 ; 9 223 372 036 854 775 807 ] ou non-signés [ 0 ; 18 446 744 073 709 551 615 ]
  • 14. Création d’une table Types de données MySQL (les réels) • FLOAT(précision) [ZEROFILL] 4 ou 8 oct Nombre à virgule flottante avec simple précision (si précision <=24) ou double précision (si précision est entre 25 et 53). • FLOAT[(M,D)] [ZEROFILL] 4 octets Nombre à virgule flottante, en précision simple. Les valeurs possibles vont de -3.402823466E+38 à 3.402823466E+38. M indique la taille de l'affichage D est le nombre de décimales.
  • 15. Création d’une table Types de données MySQL (les réels) • DOUBLE[(M,D)] [ZEROFILL] 8 octets Nombre à virgule flottante, en précision double. Les valeurs possibles vont de -1.7976931348623157E+308 à 1.7976931348623157E+308. • DECIMAL[(M[,D])] [ZEROFILL] Nombres à virgule flottante stockés comme des chaînes de caractères. Occupe M+2 octets si D > 0, M+1 octets si D = 0
  • 16. Création d’une table Types de données MySQL (le temps) • DATE 3 octets Stocke une date au format 'AAAA-MM-JJ' allant de '1000-01-01' à '9999-12-31‘ • DATETIME 8 octets Stocke une date et une heure au format 'AAAA-MM-JJ HH:MM:SS' allant de '1000-01-01 00:00:00' à '9999-12-31 23:59:59'
  • 17. Création d’une table Types de données MySQL (le temps) • TIMESTAMP [M] 4 octets Stocke une date sous forme numérique allant de '1970-01-01 00:00:00' à l'année 2037. L'affichage dépend des valeurs de M : AAAAMMJJHHMMSS, AAMMJJHHMMSS, AAAAMMJJ, ou AAMMJJ pour M égal respectivement à 14 (ou absent), 12, 8, et 6 • TIME 3 octets Stocke l'heure au format 'HH:MM:SS', allant de '-838:59:59' à '838:59:59‘ • YEAR[(4|2)] 1 octet Stocke l’année à 4 (par défaut) ou 2 chiffres allant de 1901 à 2155 ( 4 chiffres) et de 1970-2069 (2 chiffres).
  • 18. Création d’une table Types de données MySQL (les caractères) • CHAR (M) [BINARY] Stocke une chaîne de caractère de taille fixe M (de 0 à 255). BINARY permet de tenir compte de la casse. • VARCHAR (M) [BINARY] Stocke des chaînes de 255 caractères maximum. Économise de l’espace mémoire mais ralentit la recherche. • TINYBLOB et TINYTEXT Stockent des fichiers ou du texte de 255 caractères maximum. Le 1er aura un contenu de type binaire (sensible à la casse) Le 2nd aura un contenu de type ASCII (insensible à la casse) • BLOB et TEXT Stockent des fichiers ou du texte de 65 535 caractères maximum.
  • 19. Création d’une table Types de données MySQL (les caractères) • MEDIUMBLOB et MEDIUMTEXT Stockent des fichiers ou du texte de 16 777 215 caractères maximum. • LONGBLOB et LONGTEXT Stockent des fichiers ou du texte de 4 294 967 295 caractères maximum. • ENUM('valeur_possible1','valeur_possible2', ...) Énumération de valeurs. Une valeur parmi 65535. • SET('valeur_possible1','valeur_possible2', ...) Ensemble de valeurs. Une ou plusieurs valeurs parmi 64. • NB 1 : On peut donc associer ENUM aux champs de type radio , et SET aux champs de type checkbox; • NB 2 : Ces deux types peuvent contenir des valeurs null.
  • 20. Maintenance d’une table • Suppression de table : DROP TABLE nom_table; • Ajouter un attribut : ALTER TABLE nom_table ADD definition [First|After attribut] • Supprimer un attribut : ALTER TABLE nom_table DROP attribut • Modifier la définition d’un attribut: ALTER TABLE nom_table ALTER attribut nouvelle_definiton • Changer la valeur par défaut d’un attribut: ALTER TABLE nom_table ALTER attribut {SET DEFAULT valeur} • Créer une clé primaire : ALTER TABLE nom_table ADD PRIMARY KEY (attribut) • Supprimer une clé primaire : ALTER TABLE nom_table DROP PRIMARY KEY
  • 21. Insertion de données INSERT INTO nom_table [(nomattribut1,...,nomattributN)] VALUES (valeur1,...,valeurN), [(autre_valeur1,...,autre_valeurN)]; • Les attributs qui ne sont pas mentionnés prendront leur valeur par défaut. • Si les noms d’attributs sont omis il faut fournir une valeur pour toute les colonnes dans l'ordre dans lequel elle ont été spécifiées lors de la création de la table. • Les valeurs chaînes de caractère sont entre '…'.
  • 22. Màj et suppression de données • Syntaxe de mise à jour de données: UPDATE nom_table SET nom_col1=new_valeur1, nom_col2=new_valeur2, … [WHERE prédicat] • Syntaxe de suppression de données DELETE FROM nom_table [WHERE prédicat] • WHERE ,clause de filtre, introduit un prédicat (1 ou +sieurs expressions conditionnelles) pour spécifier les enregistrements à modifier ou à supprimer. • ATTENTION : Si WHERE est omise, les modif. ou suppressions sont appliquées à la totalité des enregistrements de la table.
  • 23. consultation de données syntaxe SELECT [DISTINCT] * ou liste_de_champs (séparés par ,) FROM nom_table [WHERE prédicat] [GROUP BY critère_de_regroupement HAVING prédicat] [ORDER BY liste_de_colonnes (séparés par ,)] [LIMIT nbr_de_lignes_à_retourner [OFFSET nbr_lignes_à_ignorer]] • * sélectionne tous les champs de la table • DISTINCT élimine les doublons dans le résultat • WHERE introduit un prédicat pour spécifier les enregistrements à sélectionner. • GROUP BY permet de définir des regroupements d’enregistrements afin d’effectuer des calculs statistiques. • HAVING (filtre après sélection) spécifie un prédicat sur des groupes d'enregistrements générés par la clause GROUP BY ou des fonctions d’agrégat.
  • 24. consultation de données syntaxe(suite et fin) • ORDER BY permet de trier (ASC par défaut ou DESC) les lignes du résultat en fonction d’une ou ide +sieurs colonne(s) listée(s) dans la SELECT. • LIMIT et OFFSET permettent de ne récupérer qu'une partie des lignes engendrées par le reste de la requête. • LIMIT spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. • OFFSET indique le nombre de lignes à ignorer depuis le début du jeu de résultat. • Lors de l'utilisation de LIMIT, il est nécessaire d'utiliser une clause ORDER BY contraignant les lignes résultantes dans un ordre unique. • LIMIT et OFFSET sont très utiles pour afficher un catalogue volumineux en plusieurs pages.
  • 25. consultation de données prédicat (1/2) Pour exprimer un prédicat on peut utiliser: • les opérateurs arithmétiques : +,-,*,/,% ; • les opérateurs booléens : AND, OR, NOT ; • les opérateurs de comparaison : =, != (ou < >), <, >, <=, >= ; • IS [ NOT ] NULL pour tester si la valeur est NULL (vide) ou non; • [ NOT ] EXIST ( SELECT ... ) pour tester si la sélection renvoi quelque chose ou non; • [ NOT ] BETWEEN val_1 AND val_2 pour tester si la valeur est entre val_1 et val_2 (incluses)
  • 26. consultation de données prédicat (2/2) • [ NOT ] IN (var_1, var_2, ...) / [ NOT ] IN ( SELECT ... ) pour tester si la variable est dans la liste/sous-requête • operateur ALL (var_1, var_2, ...) / operateur ALL ( SELECT ... ) pour tester si la valeur est <, >, <=, >= à toutes les valeurs de la liste/sous-requête • operateur ANY (var_1, var_2, ...) / operateur ANY ( SELECT ... ) pour tester si la valeur est <, >, <=, >= à au moins une valeur de la liste/sous-requête • [ NOT ] LIKE '%chaîne_%' pour tester si la variable ressemble ou non à la chaîne – '%' remplace une chaîne – '_' remplace un caractère
  • 27. consultation de données fonctions d’agrégat • SELECT COUNT(*) FROM nom_table Compte le nombre d’enregistrement de nom_table – count(*) : compte aussi les valeurs NULL (vide) ; – count(attribut) : compte seulement les valeurs non NULL ; – count(distinct attribut) : une valeur est comptée une seule fois • SELECT MAX(attribut) FROM nom_table Renvoie La valeur la plus grande de l’attribut spécifié • SELECT MIN(attribut) FROM nom_table Renvoie La valeur la plus petite de l’attribut spécifié • SELECT AVG(attribut) FROM nom_table Renvoie la moyenne sur toutes les valeurs de l’attribut spécifié • SELECT SUM(attribut) FROM nom_table Renvoie la somme de toutes les valeurs de l’attribut spécifié.
  • 28. consultation de données jointure • Une jointure consiste à faire une sélection de données sur plusieurs tables. • Les tables concernées doivent avoir chacune au moins une colonne contenant un même type d’information • Syntaxe: SELECT col1, t1.col2 [AS] alias1col2, t2.col2 [AS] alias2col2, col3, col4, ... FROM table1 [AS] t1, table2 [AS] t2, ... WHERE prédicat_de_jointure • La condition de jointure est de la forme : table1.colX = table2.colY ou t1.colX=t2.colY dans laquelle colX et colY contiennent des données représentant la même information • Utiliser éventuellement et optionnellement le mot clé AS pour renommer des colonnes ou des tables lors de la sélection.
  • 29. consultation de données jointure avec JOIN • Un prédicat de jointure faite dans la clause WHERE ne permet pas de faire la distinction entre ce qui relève du filtrage (restriction) et ce qui relève de la jointure (extension). • D’où une autre syntaxe de la jointure : SELECT col1, t1.col2 [AS] alias1col2, t2.col2 [AS] alias2col2, col3, col4, … FROM table1 [AS] t1 [INNER]JOIN table2 [AS] t2, … ON prédicat_de_jointure ou bien USING (colonne(s) de jointure) WHERE prédicat_de_filtre • Le mot clef INNER (facultatif) désigne que seules les lignes comportant une valeur qui existe dans toutes les tables jointes seront incluses dans les opérations de la requête.
  • 30. consultation de données jointure externe • La jointure externe permet de prendre aussi en compte, dans le résultat, les lignes qui n’ont pas de valeur sur les colonnes de jointure. • Syntaxe: SELECT col1, t1.col2 [AS] alias1col2, t2.col2 [AS] alias2col2, col3, col4, … FROM table1 [AS] t1 LEFT | RIGHT | FULL [OUTER] JOIN table2 [AS] t2, … ON prédicat_de_jointure ou USING (colonne(s) de jointure) WHERE prédicat_de_filtre • Les mots clefs LEFT, RIGHT et FULL indiquent la manière dont le moteur de requête doit effectuer la jointure externe. • LEFT/RIGHT -> la table située à gauche/droite du mot clef JOIN • FULL indique que la jointure externe est bilatérale.
  • 31. consultation de données jointure externe (exemple) • Supposons qu’on rajoute les ethnies « Soussou » et « Bambara » dans la table « ethnies » et que l’on souhaite afficher les ethnies qui n’ont pas de membre dans la table « personnes ». • On rappelle que les tables « ethnies » et « personnes » sont liées • La requête à exécuter est la suivante : SELECT e.nom AS ethnies_pas_representees FROM ethnies AS e LEFT JOIN personnes AS p USING (id_eth) WHERE p.id_eth is NULL
  • 32. Droits d’accès aux données • Syntaxe pour donner des privilèges : GRANT droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] ON {nom_de_table | * | nom_base.*} TO nom_utilisateur1 [IDENTIFIED BY 'password'] [, nom_utilisateur2 [IDENTIFIED BY 'password'] ...] [WITH GRANT OPTION]; • Les droits sur une table sont SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , GRANT OPTION , INDEX et ALTER . • Les droits sur une colonne sont SELECT , INSERT et UPDATE . • Si une base est sélectionnée, ON * donne des droits sur elle. • Si aucune base n’est sélectionnée, ON * affecte les droits sur le serveur • nom_utilisateur est généralement sous la forme user@'host' • La clause WITH GRANT OPTION, est utilisée pour autoriser la transmission des droits. • Syntaxe pour supprimer des privilèges : REVOKE droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] ON {nom_de_table | * |nom_base.*} FROM nom_utilisateur1 [, nom_utilisateur2 ...]