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 ...
MySQL 
késako? 
• Système de gestion de base de données relationnelles. 
• Logiciel permettant de créer des bases de donné...
MySQL 
historique 
• 1994 : l’entreprise australienne Hugues Technologies développe 
le SGBD mSQL (mini-SQL). 
• Mai 1995 ...
MySQL 
connexion au serveur 
• MySQL fonctionne en mode client-serveur. 
• Avec EasyPHP, il y a +ieurs manières de se conn...
SQL 
késako? 
• SQL (Structured query language ou langage structuré de 
requêtes) est un pseudo-langage informatique (de t...
SQL 
historique 
• 1970 : Edgar Codd d’IBM crée le modèle relationnel qui inspira 
le développement du langage SEQUEL (Str...
Les identificateurs de MySQL 
• Un identificateur est un nom donné à une base de données, 
une table, un attribut ou un al...
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 ...
Création d’une table 
syntaxe 
CREATE TABLE [IF NOT EXISTS] nomTable( 
nomAttribut1 typeAttribut1 [NOT NULL][AUTO_INCREMEN...
Création d’une table 
avec une clé étrangère 
• On appelle « clé étrangère » (foreign key) une colonne ou une 
combinaison...
Création d’une table 
Types de données MySQL (les petits entiers) 
• TINYINT[(M)] [UNSIGNED] [ZEROFILL] 1 octet 
Très peti...
Création d’une table 
Types de données MySQL (les entiers) 
• MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 3 octets 
Entiers signé...
Création d’une table 
Types de données MySQL (les réels) 
• FLOAT(précision) [ZEROFILL] 4 ou 8 oct 
Nombre à virgule flott...
Création d’une table 
Types de données MySQL (les réels) 
• DOUBLE[(M,D)] [ZEROFILL] 8 octets 
Nombre à virgule flottante,...
Création d’une table 
Types de données MySQL (le temps) 
• DATE 3 octets 
Stocke une date au format 'AAAA-MM-JJ' 
allant d...
Création d’une table 
Types de données MySQL (le temps) 
• TIMESTAMP [M] 4 octets 
Stocke une date sous forme numérique al...
Création d’une table 
Types de données MySQL (les caractères) 
• CHAR (M) [BINARY] 
Stocke une chaîne de caractère de tail...
Création d’une table 
Types de données MySQL (les caractères) 
• MEDIUMBLOB et MEDIUMTEXT 
Stockent des fichiers ou du tex...
Maintenance d’une table 
• Suppression de table : 
DROP TABLE nom_table; 
• Ajouter un attribut : 
ALTER TABLE nom_table A...
Insertion de données 
INSERT INTO nom_table 
[(nomattribut1,...,nomattributN)] 
VALUES (valeur1,...,valeurN), 
[(autre_val...
Màj et suppression de données 
• Syntaxe de mise à jour de données: 
UPDATE nom_table 
SET nom_col1=new_valeur1, nom_col2=...
consultation de données 
syntaxe 
SELECT [DISTINCT] * ou liste_de_champs (séparés par ,) 
FROM nom_table [WHERE prédicat] ...
consultation de données 
syntaxe(suite et fin) 
• ORDER BY permet de trier (ASC par défaut ou DESC) les lignes du 
résulta...
consultation de données 
prédicat (1/2) 
Pour exprimer un prédicat on peut utiliser: 
• les opérateurs arithmétiques : +,-...
consultation de données 
prédicat (2/2) 
• [ NOT ] IN (var_1, var_2, ...) / [ NOT ] IN ( SELECT ... ) pour 
tester si la v...
consultation de données 
fonctions d’agrégat 
• SELECT COUNT(*) FROM nom_table 
Compte le nombre d’enregistrement de nom_t...
consultation de données 
jointure 
• Une jointure consiste à faire une sélection de données sur 
plusieurs tables. 
• Les ...
consultation de données 
jointure avec JOIN 
• Un prédicat de jointure faite dans la clause WHERE ne permet 
pas de faire ...
consultation de données 
jointure externe 
• La jointure externe permet de prendre aussi en compte, dans 
le résultat, les...
consultation de données 
jointure externe (exemple) 
• Supposons qu’on rajoute les ethnies « Soussou » et 
« Bambara » dan...
Droits d’accès aux données 
• Syntaxe pour donner des privilèges : 
GRANT droit1 [(liste_colonnes)] [, droit2 [(liste_colo...
Prochain SlideShare
Chargement dans…5
×

introduction au SQL et MySQL

1 087 vues

Publié le

.

Publié dans : Logiciels
  • Soyez le premier à commenter

introduction au SQL et MySQL

  1. 1. Implémentation d’une BD sur MySQL et initiation au SQL UCAD/FST/DMI/LPCM M. DIENG Abdoulaye Mars 2011
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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 ...]

×