0% ont trouvé ce document utile (0 vote)
77 vues69 pages

Introduction au langage SQL

Le document décrit les principales caractéristiques du langage SQL, y compris son histoire, ses différents types d'instructions et fonctionnalités comme la sélection, la projection, le tri et le regroupement de données.

Transféré par

Youness Belkhiri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
77 vues69 pages

Introduction au langage SQL

Le document décrit les principales caractéristiques du langage SQL, y compris son histoire, ses différents types d'instructions et fonctionnalités comme la sélection, la projection, le tri et le regroupement de données.

Transféré par

Youness Belkhiri
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Le langage SQL

 Histoire
– langages pour les BD relationnelless incluant toutes
les possibilités de l'algèbre relationnelle : QUEL,
SEQUEL, SQL (79, sur Oracle)
– Normalisation en 87 par ANSI de SQL
– plus d'une centaine de produits supportant SQL
aujourd'hui
 SQL n'est pas un langage de programmation
– 2 douzaines d'instructions environ
– peut trouver sa place dans un langage de
programmation
1
Caractéristiques
 SQL assure l'indépendance des données
 SQL est un langage déclaratif (par opposition à
procédural)
 Mode interactif ou programmé
– interactif : instruction SQL tapée directement, instantanément
traitée
– à l'intérieur d'un pgm : appel de SQL dans un pgm en Python ou
C, ...
 instruction SQL = requête
 résultat d'une requête = table

2
Caractéristiques

 SQL est un langage à dimension triple :


– le DDL (Data Definition Language) : commandes de
SQL permettant de créer, modifier ou effacer la
définition (schéma) d'une BD ou d'une table.
– le DML (Data Manipulation Language) : interrogation
et modification de l'information contenue dans les
tables
– le DCL (Data Control Language) : sécurité et
confidentialité de la BD.

3
SQL1 - 86
 LANGAGE DE DEFINITIONS DE DONNEES
– CREATE TABLE
– CREATE VIEW
 LANGAGE DE MANIPULATION DE DONNEES
– SELECT OPEN
– INSERT FETCH
– UPDATE CLOSE
– DELETE
 LANGAGE DE CONTROLE DE DONNEES
– GRANT et REVOKE
– BEGIN et END TRANSACTION
– COMMIT et ROLLBACK

4
Le Language de Manipulation des
Données : la consultation de données
 Instruction SELECT : 3 parties principales :
– clause (obligatoire) Select : précise les valeurs qui constituent
chaque ligne du résultat
– clause (obligatoire) from : indique les tables desquelles le
résultat tire ses valeurs
– clause where : donne la condition de sélection que doivent
satisfaire les lignes qui fournissent le résultat
SELECT schéma
FROM table
WHERE condition ;

5
Interrogation en SQL
SELECT <liste de colonnes>
FROM <liste de tables>
[WHERE <critère de jointure> AND <critère de sélection>]
[GROUP BY <attributs de partitionnement>]
[HAVING <citère de restriction>]
 Exemple :
SELECT NomCoureur
FROM Coureurs
WHERE CodePays = ‘SUI’;

6
Interrogation d’une seule table
PILOTE(NUMPIL,NOMPIL,ADR,SAL)
AVION(NUMAV,NOMAV,CAPACITE,LOC)
VOL(NUMVOL,NUMPIL,NUMAV,VILLE_DEP,
VILLE_ARR,H_DEP,H_ARR)
OU
EMP(Num,Nom,Fonction,N_Sup,Embauche,
Salaire,N_Dep)
DEPT(N_Dept,Nom,Lieu)
7
PROJECTION
 Extraction simple : afficher une table
entièrement
SELECT *
FROM Nom_table;
 Exemple :
– Tous les pilotes?
– Expression algébrique : PILOTE
– SQL : SELECT *
FROM PILOTE;

8
PROJECTION
SELECT Nom_Col1, ..., Nom_ColN
FROM Nom_table;
 Exemple :
Requête : Liste des noms de pilotes
Algèbre : πNOMPIL (PILOTE)
SQL : SELECT NOMPIL
FROM PILOTE
La clause DISTINCT permet d'éliminer les doublons.

9
SELECTION
SELECT Nom_Colonne
FROM Nom_Table
WHERE critère ;
 Exemple :
– Requête : La liste des noms de pilotes niçois
– Algèbre : πNOMPIL (σ ADR = ‘NICE’(PILOTE))
– SQL : SELECT NOMPIL
FROM PILOTE
WHERE ADR =‘NICE’

10
Opérateurs de comparaison
 =,>,<,>=,<=,<> (ou != ou ^=)
 In et not in
– Requête : quels sont les noms d’avions de capacité supérieure
à 350 localisés à Paris ou Marseille ou Nice ?
– SQL : SELECT NOMAV
FROM AVION
WHERE CAP >= 350 AND (LOC = ‘PARIS’ OR
LOC = ‘MARSEILLE’ OR LOC = ‘NICE’)
OU
SELECT NOMAV
FROM AVION
WHERE CAP >= 350 AND
LOC IN (‘PARIS’,‘MARSEILLE’,’NICE’)
11
Opérateurs de comparaison
 LIKE : appartenance à une chaîne de caractères
– ‘_’ remplace n'importe quel caractère
– ‘%’ remplace n'importe quelle chaîne de caractères
 Exemple :
– Requête : Quels sont les noms de pilotes qui commencent par
‘DU’ ?
– SQL : SELECT NOMPIL
FROM PILOTE
WHERE NOMPIL like ‘DU%’
– Requête : Quels sont les noms de pilotes possédant un ‘A’ en
seconde position ?
– SQL : SELECT NOMPIL
FROM PILOTE
12 WHERE NOMPIL like ‘_A%’
Opérateurs de comparaison

 BETWEEN : appartenance à un intervalle


 Exemple :
– Requête : Quels sont les salariés gagnant entre
20000 et 25000 ?
– SQL : SELECT Nom, Salaire
FROM EMP
WHERE Salaire BETWEEN 20000 AND
25000

13
Nom de colonne

 Les colonnes constituant le résultat d’un


SELECT peuvent être renommées dans le
SELECT
– Requête : salaire de chaque employé
– SQL : SELECT Nom, Salaire Salaire_mensuel
FROM EMP;

14
Opérateurs de comparaison
 IS NULL et IS NOT NULL
 Exemple :
– Requête : les noms des pilotes dont l’adresse n’a pas
été renseignée
– SQL : SELECT NOMPIL
FROM PILOTE
WHERE ADR IS NULL

15
Tri des résultats
 ORDER BY
SELECT attribut1, attribut2, ...
FROM Nom_table
ORDER BY attribut1 [ASC], attribut2 [DESC],
... ;
 Exemple :
– Requête : Les pilotes bordelais classés par salaire
– SQL : SELECT *
FROM PILOTE
WHERE ADR = ‘BORDEAUX’
ORDER BY SAL

16
Fonctions
 La relation résultat
– ne comportera qu'une ligne
– ou pourra simplement être considérée comme un nombre
 Fonctions numériques :
– AVG : moyenne
– Exemple : Salaire moyen des pilotes:
– SQL : SELECT AVG(SAL)
FROM PILOTE;
– SUM : somme
– Exemple : le chiffre d’affaires généré par les vendeurs de Casa:

– SQL : SELECT SUM(CA)


FROM Vendeur
17 WHERE Region = ‘CASA’;
Fonctions
 COUNT : nombre d'éléments sélectionnés
– Requête : Nombre de pilotes bordelais ?
– SQL : SELECT COUNT(*)
FROM PILOTE
WHERE ADR = ‘BORDEAUX’;
 MIN, MAX, ...
 Expressions et Fonctions sur les chaînes de caractères
– || : seul opérateur sur les chaînes de caractères : la
concaténation.
 Résultat : chaîne de caractères obtenue en écrivant d'abord la
chaîne à gauche de || puis celle à droite de ||.
– LOWER(chaîne) : Renvoie chaîne en ayant mis toutes ses
lettres en minuscules.
 ...
18
Fonctions

 Expressions et fonctions sur les dates


– Opérateurs sur les dates : + et -
 date +/- nombre : le resultat est une date obtenue en
ajoutant le nombre de jours nombre à la date date.
 date2 - date1 : le resultat est le nombre de jours entre les
deux dates.

19
Regroupements

 Il est possible de subdiviser la table en groupes


 Permet d’appliquer les fonctions d’agrégation à
des sous-groupes
– Requête : Le nombre de pilotes par ville?
– SQL : SELECT ADR Ville, Count(*) nbre_pilotes
FROM PILOTE
GROUP BY ADR;

20
Résultat

ville Nbre_pilotes

BORDEAUX 1
CASA 1
LYON 1
MARSEILLE 1
NICE 3
PARIS 4

21
Selection des groupes
 HAVING : conditions imposées aux groupes (de lignes)
à sélectionner
– pour éviter la confusion avec la clause WHERE (qui
ne s'applique qu'à des lignes seules)
 Exemple :
– Requête : Donner les villes où on a au moins 2
pilotes?
– SQL : SELECT ADR ville, Count(*) nbre_pilotes
FROM PILOTE
GROUP BY ADR
HAVING Count(*) >=2;

22
Résultat

ville Nbre_pilotes

NICE 3
PARIS 4

23
Quantificateurs
 ALL + opérateur de comparaison : teste si une
expression est vérifiée dans tous les cas de figure
– Requête : Tous les pilotes ont-ils un salaire supérieur à 10000 ?
– SQL : 10000 < ALL (SELECT SAL FROM PILOTE)

 SOME ou ANY : expression vraie si la comparaison est


vérifiée pour au moins une valeur
– Requête : vérifiez si au moins un pilote a un salaire supérieur à
20000.
– SQL : 20000 < ANY (SELECT SAL FROM PILOTE)

24
Quantificateurs

 EXISTS, NOT EXISTS

25
Comment interpréter une requête
complexe monotable ?
 on considère la table spécifiée dans la clause FROM
 on sélectionne les lignes sur la base de la clause
WHERE
 on classe ces lignes en groupes comme spécifié dans la
clause GROUP BY
 on ne retient que les groupes qui vérifient la clause
HAVING
 de chacun de ces groupes, on extrait les valeurs
demandées dans la clause SELECT
 les valeurs demandées sont ordonnées selon la clause
ORDER BY éventuelle.

26
Interrogations sur plusieurs tables :
 SQL permet la liaison de plusieurs tables via 3
possibilités :
– Les opérations de jointure entre 2 tables en se
basant sur l'égalité entre l'un des attributs de chaque
table
– Le principe des requêtes imbriquées qui repose sur
le fait que le résultat d'une requête est une table
– L'utilisation d'opérations ensemblistes pour
combiner le résultat de plusieurs requêtes.

27
Jointures
SELECT ...
FROM nom_table1, nom_table2...
WHERE critère;
– pas de condition de sélection : résultat obtenu =
produit cartésien des tables présentes derrière le
FROM.
– Requête : quel est le nom de pilote qui assure le vol
numéro 20 ?
– SQL : SELECT NOMPIL Condition
FROM PILOTE P, VOL V de jointure
WHERE NUMVOL=20
AND [Link]=[Link]
28
Auto-jointure :

 Requête : Donner pour chaque employé le nom


de son supérieur hiérarchique.

 SQL : SELECT [Link], [Link]


FROM EMP, EMP chef
WHERE EMP.N_sup= [Link];

29
Autres jointures
 Le critère d'égalité est le critère de jointure le
plus naturel. Mais on peut utiliser d'autres types
de comparaisons comme critères de jointures.
– Requête : Quels sont les employés gagnant plus
que SIMON ?
– SQL : SELECT [Link], [Link],
[Link]
FROM EMP, EMP empbis
WHERE [Link] = 'SIMON‘
AND [Link] > [Link] ;

30
Requêtes imbriquées

 une clause WHERE est elle-même le résultat


d'un SELECT
 renvoient une ou plusieurs valeurs

31
Requêtes imbriquées
 Sous-interrogation ramenant une seule valeur
– Requête : Quels sont les pilotes (numéro et nom)
habitant dans la même ville que le pilote 1004?
SQL : SELECT NUMPIL,NOMPIL
FROM PILOTE
WHERE ADR = (SELECT ADR
FROM PILOTE
WHERE NUMPIL =
1004)
AND NUMPIL <> 1004
– Remarque : auto-jointure possible pour répondre à
cette question
32
Requêtes imbriquées

 une sous-interrogation qui ne ramène aucune


ligne se termine avec un code d'erreur.
 une sous-interrogation ramenant plusieurs
lignes provoquera aussi, dans ce cas, une
erreur

33
Requêtes imbriquées

 Sous-interrogation ramenant plusieurs


lignes
 Avec des opérateurs de comparaison admettant
à leur droite un ensemble de valeurs comme :
– l'opérateur IN
– les opérateurs obtenus en ajoutant ANY ou ALL à la
suite d'un opérateur de comparaison classique (=,
<>, >, >=, <, <=)

34
Requêtes imbriquées
 Requête : Quels sont les employés gagnant plus que
tous les employés du département 30 ?
 SQL : SELECT Nom, Salaire
FROM Emp
WHERE salaire > ALL(SELECT Salaire
FROM Emp
WHERE N_Dep=30);

35
Requêtes imbriquées

 Sous-interrogation ramenant plusieurs colonnes


– Exemple : Quels sont les employés ayant la même
fonction et le même supérieur que CODD ?
– SQL : SELECT Nom, Fonction, N_Sup
FROM Emp
WHERE (Fonction,N_Sup) = (SELECT Fonction,N_Sup
FROM Emp
WHERE Nom = 'CODD');

36
Requêtes imbriquées
 Sous-interrogation ramenant au moins une ligne
 L'opérateur EXISTS permet de construire un prédicat
vrai si la sous-interrogation qui suit ramène au moins
une ligne.
– Requête : Quels sont les employés travaillant dans un
département qui a procédé à des embauches depuis le début
de l'année 2001 ?
– SQL : SELECT *
FROM Emp Empbis
WHERE EXISTS (SELECT *
FROM EMP
WHERE Embauche >= '01-jan-01'
37 AND N_Dept = Empbis.N_Dept);
Les opérateurs ensemblistes
 permettent de "joindre" des tables verticalement c'est-à-
dire de combiner dans un résultat unique des lignes
provenant de deux interrogations. Les opérateurs
ensemblistes sont les suivants :
– l'union : UNION
– l'intersection : INTERSECT
– la différence relationnelle : EXCEPT
 La syntaxe d'utilisation est la même pour ces trois
opérateurs :
 SELECT ... {UNION | INTERSECT | EXCEPT} SELECT
...

38
Les opérateurs ensemblistes
 Dans une requête utilisant des opérateurs ensemblistes :
– Tous les SELECT doivent avoir le même nombre de colonnes
sélectionnées, et leur types doivent être un à un identiques.
– Les doubles sont éliminés (DISTINCT implicite).
– Les noms de colonnes sont ceux du premier SELECT.
 On peut combiner le résultat de plus de deux SELECT au
moyen des opérateurs UNION, INTERSECT, EXCEPT.
SELECT ... UNION SELECT ... EXCEPT SELECT ...
– Expresion évaluée de gauche à droite. Modification de l'ordre
d'évaluation par des parenthèses.
SELECT ...
UNION (SELECT ...
EXCEPT
39 SELECT ...)
Les opérateurs ensemblistes

Exemple : Lister tous les enseignants


SELECT Nom, Prénom
FROM MdC
UNION
SELECT Nom, Prénom
FROM Professeur ;

40
Coment interpréter une requête
complexe multitable ?
 on considère les tables spécifiées dans la clause FROM
 on effectue la jointure de ces tables selon le critère de
jointure de la clause WHERE
 on sélectionne les lignes de la jointure sur la base des
autres conditions de la clause WHERE
 on classe ces lignes en groupes comme spécifié dans la
clause GROUP BY
 on ne retient que les groupes qui vérifient la clause
HAVING
 de chacun de ces groupes, on extrait les valeurs
demandées dans la clause SELECT
 les valeurs demandées sont ordonnées selon la clause
ORDER BY éventuelle.
41
Coment interpréter une requête
complexe multitable ?
Exemple :
SELECT N°Client, COUNT(*), SUM(QtéCom)
FROM Commande C, LigneCom L
WHERE C.N°Com = L.N°Com
AND N°Pro = ‘PA 60’
GROUP BY N°Client
HAVING COUNT(*) >= 2
ORDER BY N°Client

42
Le Language de Manipulation des
Données : la modification de
données
 Insertion de nouveaux n-uplets
INSERT INTO nom_table(nom_col1, nom_col2,...)
VALUES (val1, val2,...)
 Exemple :
INSERT INTO Etudiant (n°Et, Nom, Prénom)
VALUES(96035, ‘Diego’, ‘Berger’)

43
La modification de données
 Il est possible d'insérer dans une table des lignes
provenant d'une autre table. La syntaxe est la suivante :
INSERT INTO nom_table(nom_col1, nom_col2, ...)
SELECT ...
 Exemple : Insérer dans la table Bonus les noms et
salaires des directeurs.
INSERT INTO bonus
SELECT nom, salaire
FROM emp
WHERE fonction = 'directeur';
44
La modification de données
 Modification de lignes
– La commande UPDATE permet de modifier les valeurs d'une
ou plusieurs colonnes, dans une ou plusieurs lignes existantes
d'une table. La syntaxe est la suivante :
UPDATE nom_table
SET nom_col1 = {expression1 | ( SELECT ...) },
nom_col2 = {expression2 | ( SELECT ...) }
[WHERE critère];
 Exemple : Augmenter de 10% les salaires [des
ingénieurs].
UPDATE emp
SET salaire = salaire * 1.1
[WHERE fonction = 'ingenieur' ];
45
La modification de données
 Suppression de lignes
– La commande DELETE permet de supprimer des lignes d'une
table. La syntaxe est la suivante :
DELETE FROM nom_table
WHERE critère;
– Toutes les lignes pour lesquelles le critère est évalué à vrai sont
supprimées. En l'absence de clause WHERE, toutes les lignes
de la table sont supprimées.
– Exemple :
DELETE FROM emp
WHERE fonction = ‘retraité‘;

46
Le language de définition de
données

 Création d'une table


CREATE TABLE nom_table
(nom_col1 TYPE1 [NOT NULL/
PRIMARY KEY/FOREIGN KEY],
nom_col2 TYPE2 [.../.../...],
...);

47
Types acceptés
 Chaine de caractères : TEXT
- CHAR (TAILLE) : chaine de caractères de longueur fixe ; taille comprise
entre 1 et 2000 octets
- VARCHAR(taille_max) : chaine de caractères de longueur variable (taille
comprise entre 1 et 4000 octets )
- CLOB (Character Large Object): chaînes de caractères très longues (des
textes, voire des livres), le type VARCHAR ne suffit plus.
 Type numérique : INTEGER, REAL
- Type numérique pour les entiers : INTEGER pour 4 octets
- Type numérique pour les décimaux à virgule flottante : REAL
- Type numérique pour nombres en virgule flottante double précision
(DOUBLE PRECISION)
- Type numérique pour les décimaux à virgule fixe : NUMERIC(nb_chiffres,
48 nb_décimales).
Types acceptés
 Type date : DATE
- DATE : pour les dates au format AAAA-MM-JJ
- TIME : type heure au format HH:MM:SS
- DATETIME : type date et heure au format: AAAAMMJJHHMMSS
- YEAR: pour les années

49
Création d'une table
CREATE TABLE Departement
(NDep INTEGER NOT NULL PRIMARY KEY ,
NomDep TEXT,
Directeur TEXT,
Budget REAL);
CREATE TABLE Etudiant
(NEtud INTEGER NOT NULL PRIMARY KEY,
Nom VARCHAR(20),
Prénom TEXT,
DateNaissance DATE,
Rue TEXT,
CodePostal INTEGER,
Ville TEXT DEFAULT ‘PARIS’,
50 NDep INTEGER NOT NULL FOREIGN KEY);
Suppresion et modification d'une
table
 DROP TABLE nom_table ;
– Exemple : DROP TABLE Etudiant ;
 Modification d'une table
– Ajoût d'une ou plusieurs colonnes :
ALTER TABLE nom_table
ADD (nom_col1 TYPE1, nom_col2 TYPE2, ...);
– option : [BEFORE nom_col_before]
– Exemple : On aimerait connaître le téléphone des étudiants
ALTER TABLE Etudiant
ADD (Téléphone CHAR(10) BEFORE NDep);

51
Modification d'une table
 Suppression d'une colonne :
ALTER TABLE nom_table
DROP nom_col;
– Attention aux problèmes d'intégrité !
 Modification d’une table :
ALTER TABLE nom_table
MODIFY(nom_col1 TYPE1,nom_col2 TYPE2,...);
– Exemple : Un nom peut dépasser 20 caractères
ALTER TABLE Etudiant
MODIFY(Nom VARCHAR(25));

52
Modification d'une table

Changement de nom de tables ou de colonnes :


RENAME TABLE ancien_nom TO nouveau_nom ;
RENAME COLUMN
nom_relation.ancien_nom_col TO
nouveau_nom_col ;
– Exemple :
RENAME COLUMN [Link]
TO BirthDay;

53
Les vues
 Les vues permettent d'assurer l'objectif d'indépendance
logique. Grace à elles, chaque utilisateur pourra avoir
sa vision propre des données.
 Créer une vue
– La commande CREATE VIEW permet de créer une vue en
spécifiant le SELECT constituant la définition de la vue :
CREATE VIEW nom_vue [(nom_col1,...)]
AS SELECT ...
WITH CHECK OPTION ;

54
Les vues
 Exemple : Création d'une vue constituant une
restriction de la table emp aux employés du
departement 10.
CREATE VIEW emp10 AS
SELECT *
FROM emp
WHERE n_dept = 10 ;
 Le CHECK OPTION permet de vérifier que la mise à
jour ou l'insertion faite à travers la vue ne produisent
que des lignes qui font partie de la sélection de la vue.
 Supprimer une vue
DROP VIEW nom_vue;
55
Les index
 Considérons le SELECT suivant :
SELECT *
FROM Etudiant
WHERE nom = 'MARTIN'
– moyen de recherche des lignes avec nom = 'MARTIN' :
balayer toute la table
– prohibitif dès que nb lignes > qq centaines
 Solution offerte par tous les SGBD : création d'index
 Les index sont des structures permettant de retrouver
une ligne dans une table à partir de la valeur d'une
colonne ou d'un ensemble de colonnes.

56
Choix des index

 Indexer en priorité :
– les clés primaires
– les colonnes servant de critère de jointure
– les colonnes servant souvent de critère de recherche
 Ne pas indexer :
– les colonnes contenant peu de valeurs distinctes
(index alors peu efficace)
– les colonnes fréquemment modifiées

57
Créer un index
 Un index peut être créé par la commande suivante :
CREATE [UNIQUE] INDEX nom_index
ON nom_table (nom_col1 , nom_col2, ...)
 Option UNIQUE : interdiction que deux lignes aient la
même valeur dans la colonne indexée.
 Les requêtes SQL sont transparentes au fait qu'il existe
un index ou non.
 Effacement d'un index :
DROP INDEX Nom_de_l’index

58
Les contraintes d'intégrité
 Sur les colonnes :
– NOT NULL : force la saisie de la colonne
– DEFAULT : précise une valeur par défaut
– UNIQUE : vérifie que toutes les valeurs sont différentes
– CHECK : vérifie la condition précisée
– CONSTRAINT : permet de nommer une contrainte
 Sur la table globalement :
– CONSTRAINT
– PRIMARY KEY : clé primaire
– FOREIGN KEY (liste_col1) REFERENCES table(liste_col2): clé
étrangère => intégrité référentielle

59
Les contraintes d'intégrité
 Clé étrangère :
– Attribut ou groupe d’attribut dans une table T1 dont les valeurs
doivent exister comme valeurs de la clé candidate dans la table
T2.
– T1 : table qui référence : table secondaire du lien (contient la clé
étrangère)
– T2 : table référencée : table primaire du lien
 Du point de vue de la table qui référence (T1) :
– FOREIGN KEY (T1) REFERENCES table(T2): clé étrangère =>
intégrité référentielle
 Du point de vue de la table référencée (T2) :
– Modification de la clé primaire => effets sur les autres tables
utilisant cette clé comme clé étrangère ?
– REFERENCES complétée par ON UPDATE ou ON DELETE
60
Les contraintes d'intégrité

 RESTRICT : échec de la modification ou


suppression de la clé primaire
 CASCADE : modification ou suppression des
lignes correspondantes en cascade
 SET NULL : mettre NULL
 SET DEFAULT : mettre la valeur par défaut

61
Gestion des transactions
 Plusieurs utilisateurs peuvent accéder à la base de
données de façon concurrente, "en même temps".
– Exemple : un même système de réservations de billets d'avions
est utilisé en concurrence par des centaines d'employés
d'agences de voyage.
 Ce concept pose des problèmes quant à la cohérence
et l'intégrité de la base de données.
 Le SGBD devra donc gérer les utilisations concurrentes
sur les données avec le plus d'efficacité possible.

62
Gestion des transactions
 Une transaction est un ensemble de requêtes
élémentaires sur les données d'une base.
– Exemple : vente de produit à un client = 2 parties
 mise à jour de l'inventaire en soustrayant la quantité vendue du
produit, et
 mise à jour de la table des encaissements à réaliser pour facturer
le client.
 Fin de transaction :
– COMMIT : Validation.
– ROLLBACK : suite à un echec, le SGBD doit revenir à l'état
précédant le début de l’action. Ceci est fait automatiquement
par la commande ROLLBACK.

63
Administration d'une Base de
Données
 GESTION DES DROITS
– protéger les données de la base contre les accès non autorisés
 enregistrer et authentifier les utilisateurs
 définir des autorisations de manipulation des objets de la base par
les utilisateurs (relation, vue, contrainte d'intégrité, index)
 LES DIFFERENTS UTILISATEURS
– ADMINISTRATEUR BD
 possède tous les droits
– UTILISATEURS PRIVILEGIES
 peuvent créer des relations
– UTILISATEURS FINAUX
 peuvent manipuler des relations

64
Les différents droits sur une relation

 DROIT D'INTERROGATION
 DROIT DE MISE A JOUR (insertion,
modification, suppression de tuples)
 DROIT D'ADMINISTRATION (déclaration de
clés, définition d'index, modif. / suppression du
schéma, transmission des droits)
 DROIT DE CREATION (création schéma
relation)

65
Droits sur une relation

 EXPRESSION DES DROITS EN SQL


– DROITS GERES PAR SQL
 -> droits de manipulation des relations de base et des
vues
– ATTRIBUTION DE DROITS
 grant <droits> on <relation> to <usagers>
– grant SELECT on PRODUITS to Vendeur_DAVID

– REVOCATION DES DROITS (SQL2)


 revoke <droits > on < relation > to <usagers>
– revoke SELECT on PRODUITS to Vendeur_DAVID

66
Le mode Client-Serveur
 Serveur : serveur de ressources communes
 Client : logiciel qui accède au serveur
Machine A Machine B
Logiciel requête Logiciel
Utilisateur
Client Serveur
réponse
Besoin de permettre la connexion de n’importe quel type de
client avec n’importe quel type de serveur
Naissance de protocoles comme ODBC (Open DataBase
Connectivity) ou JDBC (Java DataBase Connectivity)
67
Le mode Client-Serveur

 permettent de traduire les requêtes du logiciel


client en ordres exploitables par le serveur puis
à traduire le format des données renvoyées par
le serveur en données manipulables par le
client
 Problème : le choix du bon constructeur. Que
mettre dans le client et que mettre dans le
serveur ?

68
Le mode Client-Serveur
ODBC : accès aux bases de données dans le monde
de Microsoft

69

Vous aimerez peut-être aussi