Présentation 7

publicité
Les bases de données
Séance 7
Les fonctions avancées :
Opérateurs ensemblistes,
Sous-requêtes et transactions
1
Bases de données VII
Les opérateurs ensemblistes
ORACLE
2
Base de données VII
Ce qui est abordé
 Les opérations ensemblistes
 Les sous requêtes
 Dépendantes
 Indépendantes
 Les transactions et accès concurrents
 Les transactions
 Les verrous
3
Base de données VII
Les opérateurs ensemblistes
 Les opérateurs ensemblistes jouent avec les
résultats de requête comme s’ils étaient
des ensembles
 UNION : réunion des résultats
 MINUS : différence des résultats
 INTERSECT : intersection des résultats
 Syntaxe générale :
SELECT …
ORACLE
<opérateur>
SELECT …
4
Base de données VII
Les opérateurs ensemblistes : conditions
 Même nombre de colonnes après
chaque SELECT.
 Colonnes de chaque table de même
type.
 Un DISTINCT est exécuté de manière
implicite
 ORDER BY : numéro des colonnes
5
Base de données VII
Les opérateurs ensemblistes : exemples
R
R
UNION
S
Col1
A
D
G
Col1
A
D
G
A1
Col2
B
E
H
Col2
B
E
H
B1
Col3
C
F
S
I
Col3
C
F
R
MINUS
I
D1 S
C1
A1
D
C2
B1
E
c3
D1
F
Col1 Col2 col3
A
B
C
G
H
I
6
Bases de données VII
Les sous-requêtes
ORACLE
MySQL
V > 5.0
7
Base de données VII
Les sous-requêtes et requêtes imbriquées
 Elles permettent d’effectuer une requête
sur la base du résultat d’une autre
requête.
 Mysql ne les implémente pas jusqu’à
MySQL 5.0
 On peut toujours s’en passer, mais elles
fournissent la façon la plus puissante
d’extraire des données complexes
8
Base de données VII
Les sous-requêtes et requêtes imbriquées
 Doivent toujours être placées après la
clause WHERE ou la clause HAVING en
lieu et place d’une constante
 Il peut y avoir plusieurs requêtes
imbriquées
 La sous-requête peut renvoyer une
valeur ou liste valeur
 Elle peut être dépendante ou
indépendante
9
Base de données VII
Les sous-requêtes qui renvoient une valeur
 Sélection classique par comparaison avec
une constante
WHERE poste = 'Manager'
 Est équivalent à :
WHERE poste = (SELECT poste from ...)
 Accepte tous les opérateurs tels que <,
>, <=, >=, <>
10
Base de données VII
Les sous-requêtes qui renvoient une valeur
SELECT
nom
FROM
employe
ORACLE
WHERE
poste = (SELECT poste
FROM employe
WHERE nom = 'Martin') ;
Renvoie tous les employés qui ont le même poste que Martin
Note : On considère que nom est clé primaire
11
Base de données VII
Celles qui renvoient une liste de valeurs
 …WHERE poste IN (SELECT poste FROM ..);
 La valeur doit être trouvée dans le résultat de la
sous requête
 On peut utiliser NOT IN
 WHERE numero > ALL (SELECT numero
FROM ..);
 La valeur testée doit être supérieure à toutes les
valeurs ramenées par la sous requête
 …WHERE poste > ANY (SELECT poste
FROM ..);
 La valeur testée doit être supérieure à au moins
une valeur obtenue par la sous requête
12
Base de données VII
Celles qui renvoient une liste de valeurs 2
 opérateur IN, NOT IN
 opérateur simple =, !=, <>, <, >,
<=, >= suivi de ALL ou ANY.
 =ANY est équivalent à IN
 !=ALL est équivalent à NOT IN
13
Base de données VII
Celles qui renvoient une liste de valeurs 3
 Exemple
SELECT
nom
FROM
client
WHERE num_client
IN (SELECT num_client
FROM commande
WHERE date_commande = '05-JUN-98');
14
Base de données VII
WHERE EXISTS et WHERE NOT EXISTS
SELECT
c.id_client
Dépendance
FROM
client c
WHERE EXISTS
(SELECT cde.id_client
FROM commande cde
WHERE cde.id_client = c.id_client)
 Cette
requête
utilise
une
sous-requête
dépendante.
 Pour obtenir des résultats la sous-requête doit être
vraie
15
Base de données VII
Sous-requêtes sur colonnes multiples
SELECT num
FROM commande
WHERE (date, id_client) =
(SELECT date, id_client
FROM commande
WHERE id_client = 'client1'
AND date = '25-jan-2005');
16
Bases de données VII
Les transactions et les accès
concurrents
ORACLE
MySQL
V > 5.0
17
Base de données VII
Transactions et accès concurrents
 Un SGBD est par définition multi-utilisateurs.
 L'exécution
simultanée
de
plusieurs
applications peut poser des problèmes
d'accès concurrents (une même information
étant manipulée par plusieurs utilisateurs à la
fois).
18
Base de données VII
Accès concurrents : le problème
 ‘Paul’ lit un enregistrement ‘a’ de la table ‘A’.
‘Paul’ modifie les données dans son application.
 ‘Pierre’ lit le même enregistrement.
 ‘Pierre’ modifie les données dans son
application
 ‘Pierre’ a fini plus tôt. Il sauvegarde ses
modifications.
 ‘Paul’ n’a rien vu, il sauvegarde à son tour.
 ‘Pierre’ revient sur son enregistrement et ne
trouve plus ses données.
19
Base de données VII
Les transactions
 Une transaction est une séquence d'opérations
(sauf create, alter, drop) qui accèdent et
modifient le contenu d'une base de données.
 Une transaction peut être validée ou invalidée.
 Le début d'une transaction peut être implicite
(début d’une session de connexion ou la fin
d’une transaction précédente) ou explicite.
 La fin d'une transaction peut être implicite ou
explicite.
20
Base de données VII
Les transactions 2
 Une fin explicite donne lieu à un
 ROLLBACK (annulation) ou un
 COMMIT (validation).
 Une fin implicite est définie par :
 Exécution d'une commande du langage
de définition de données (create alter
drop)
 Fin d’une session.
21
Base de données VII
Les transactions : points de sauvegarde
 On peut découper une transaction complexe
en créant des points d'arrêts (savepoints).
 SAVEPOINT <point_de_repere>;
 Ces points d'arrêt permettent d’annuler une
partie de la transaction. La syntaxe est :
 ROLLBACK TO [<point_de_repere>;
22
Base de données VII
Les transactions : Modèle ACID
 Atomicité
:
Une
transaction
est
complètement exécutée ou pas du tout
(unité atomique de traitement).
 Cohérence : une transaction prend une
base de données dans un état cohérent et
la transforme dans une nouvelle base de
données qui est dans un état cohérent
(préservation de la cohérence). Par contre,
la cohérence peut être violée pendant
l'exécution d'une transaction.
23
Base de données VII
Les transactions : Modèle ACID 2
 Isolation : les mises à jour faites par une
transaction ne sont visibles à l'extérieur de
celle-ci (pour les autres transactions)
qu'après la validation de la transaction.
 Durabilité : après la fin d'une transaction,
les mises à jour sont définitives même en
cas de futurs problèmes matériels (grâce
au mécanisme de reprise)
24
Base de données VII
Gestion des accès concurrents
 Un verrou est une variable d'état associée
à un objet X de la base et indiquant son
état vis à vis des opérations de
lecture/écriture.
 Verrou binaire 2 états
 verrouillé ou libre avec deux opérations
verrouiller(X) et libérer(X) => restrictif
 Verrou ternaire 3 états

en lecture (ou partagé), en écriture, ou
libre.
25
Base de données VII
Gestion des accès concurrents 2
 Granularité de contrôle de concurrence (de
forte à faible)




un attribut d’enregistrement,
un enregistrement,
une table,
une base.
 Plus la granularité est forte, plus le niveau
de concurrence augmente, et plus le niveau
de complexité de gestion des verrous
augmente
au
détriment
des
performances.
26
FIN DU COURS
27
Téléchargement