Vous êtes sur la page 1sur 33

Chapitre 3(Suite)

 Langage SQL avancé :

1- Les ordre SQL complexe ( agrégat , requête imbriquées, et la


clause having)

2- Les Vues et Index,

3- Les Séquences et Les synonymes

4- La Gestion de transactions

1
Les Vues (VIEW)

 une vue est une table virtuelle résultat d’une requête

 Rôle d’une vue

 Réduire la complexité syntaxique des requêtes


 Définir les schémas externes.
 Définir des contraintes d’intégrité.
 Définir un niveau additionnel de sécurité en restreignant l’accès à un sous
ensemble de lignes et/ ou de colonnes.
Les vues font partie du Schéma externe, schéma visible par les applications utilisant
la base de données.
2
Les Vues (VIEW)
Une vue permet de donner un nom à une requête.
La syntaxe SQL de création d'une vue est simplement

create [or replace] view nom_vue as

requete_sql [option]

La requête SQL peut s'appliquer à une table ou une vue (exception faite
de la vue que l'on est en train de définir, i.e. on ne peut pas créer une
définition récursive). La définition de la vue est stockée dans le
dictionnaire ce qui permet de traduire toute requête utilisant des vues en
une requête sur les tables.

3
Les Vues (VIEW)
• Soit les tables suivante de Schéma HR de oracle

EMPLOYEES(EMPLOYEE_ID , FIRST_NAME ,
LAST_NAME ,EMAIL,PHONE_NUMBER ,HIRE_DATE ,JOB_ID,SALARY,
COMMISSION_PCT, MANAGER_ID,DEPARTMENT_ID)

JOBS(JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY)

• On crée les vues suivantes Nom_Emp et som_sal

1- Nom_Emp: Create view Nom_Emp as select * from EMPLOYEES


where last_name like ‘ JOHN’
2- som_sal : create or replace view SOM_SAL as select J.job_title J_titl,
sum(E.SALARY) somme_sal from employees E,jobs J where E.job_id=J.job_id
group by job_title

4
Les Vues (VIEW)
• Modification au travers d'une vue

Les instructions de mise à jour de la vue doivent être traduites en mise à jour sur les tables de
base. Ceci n'est pas possible dans le cas général. Pour cette MAJ Il faut que :
1- Chaque colonne de la vue doit correspondre à une colonne d'une table.
2- La vue ne doit pas contenir :
 un opérateur ensembliste
 un opérateur DISTINCT
 une fonction de groupe, ou une fonction mathématique
 une clause GROUP BY, ORDER BY
 des jointures (avec quelques exceptions ....)
On peut interdire de modifier une vue, avec l'option WITH READ ONLY. (Sous Oracle, mais je n'ai
pas vu cette option dans la norme SQL).

5
Les Vues (VIEW)
La clause WITH CHECK OPTION

Cette option (définie dans la norme SQL) permet de vérifier que lorsqu'on modifie une
vue, les lignes concernées par la modification sont bien sélectionnées par la requête qui
définit la vue.
Sans cette option, voici le genre de problèmes que l'on peut avoir :

- Create view Nom_Emp as select * from EMPLOYEES where last_name like ‘ JOHN ’
Vue bien crée

- insert into Nom_Emp


values(6666,'TATA','TINTIN','TINGBB','777','17/06/15','AD_PRES’,'24000',NULL,NUL
L,'90');
Ligne bien crée

Attention on se retrouve dan la vue avec des données non souhaitées

-Update et delete aussi vont être bien exécutés sur la vue.

6
Les Vues (VIEW)

La clause WITH CHECK OPTION permet d'éviter les problèmes précédents

- Create view Nom_Emp as select *


from EMPLOYEES where last_name
like ‘ JOHN’ with check option
Vue bien crée
insert into Nom_Emp
values(6666,'TATA','TINTIN','TINGBB','777','1
7/06/15','AD_PRES’,'24000',NULL,NULL,'90');

ERREUR à la ligne 1: ORA-01402: vue WITH


CHECK OPTION - violation de clause WHERE

Pour renommer une vue : Rename ancien_nom to nouveau_nom;


Pour supprimer une vue : Drop view nom_de_la_vue
7
Rappels sur les indexes : Principes choix et

création : index btree , BitMap


Les Index

Qu'est-ce qu'un index?


Un index est un objet complémentaire (mais non indispensable) à la base de données  permettant d'"indexer" certaines
colonnes dans le but d'améliorer l'accès  aux données par le SGBDR, au même titre qu'un index dans un livre ne vous
est pas indispensable  mais vous permet souvent d'économiser du temps lorsque vous recherchez une partie
spécifique 

L’index est utile pour accélérer l’exécution d’une requête SQL qui lit des données et ainsi
améliorer les performances d’une application utilisant une base de données

Les 2 types d’index les plus utilisé dans Oracle :


Arbres équilibrés (B-arbre) : toutes les branches de l’arbre ont la même longueur
Il est efficace lorsque les données indexés ne sont pas répétés ( Clé primaire , données uniques)
 Bitmap : Si peu de valeurs sont possibles pour les données répétées, une chaine de bits pour chaque valeur
Les Index

Création de l’index
De manière générale, un index est créé automatiquement lors de la création de la clé
primaire d'une table ;

de la même manière, il est d'usage d‘en créer un pour chaque clé étrangère afin d'améliorer
la vitesse lors des jointures.

Un index peut être :

 Simplement le stockage des données d'une colonne de table qui sera souvent sollicitée
(surtout au niveau des recherches)

 L'ensemble de plusieurs colonnes qui feront l'objet de requête pour les recherches.
Les Index

Création de l’index
Quand ne pas créer un index
-------------------------------
Quand créer un index
----------------------------- Attributs souvent modifiés (index à

Attributs utilisées dans des jointures, recréer...),


Attributs servant souvent pour les sélections, Table de petit volume,

Table de gros volume dont la majorité des si requêtes sur NULL car les NULL, non

interrogations sélectionne moins de 15% des stockés dans l’index. (ex : WHERE ... IS

lignes, NULL).

Bitmap : attribut à peu de valeurs distinctes,

B-arbre : attribut à beaucoup de valeurs distinctes.


Les Index

Syntaxe SQL de la création de l’indes

La création d'index en SQL se fait grâce à la clause INDEX précédée 


de la clause CREATE. Elle permet de définir un index désigné par son nom, portant 
sur certains champs d'une table.
La syntaxe est la suivante : 

CREATE [UNIQUE] [BITMAP]INDEX Nom_de_l_index ON Nom_de_la_table


(Nom_de_champ [ASC\DESC], ...)
Tablespace nom_tablespace_des_index ;

•L'option UNIQUE permet de définir la présence ou non de doublons pour les


valeurs de la colonne

•L'option BITMAP Index de type bitmap

•Les options ASC\DESC permettent de définir un ordre de classement des valeurs présentes
dans la colonne

•Supprimer l’INDEX  DROP INDEX Nom_Index


Les Index
0-100 Nœud racine
L’index B-TREE ------------ ( Root Node)
-
101-200
------------
------ Le segment de la table
………….
------------ Table segment
0-33 -----
----------- 301-400- 101-134
34-67 -----------
---------- 135-167
68-100 Branches ----------
167-300
( Branch Blocks)

0 Rowid 34 Rowid 68 Rowid 101 Rowid 135Rowid 168Rowid


----------- ----------- ----------- ----------- ----------- -----------
1 Rowid 35 Rowid 69 Rowid 102Rowid 136Rowid 169Rowid
---------- ---------- ---------- ---------- ---------- ----------
… … … … … …
------- ------- ------- ------- ------- -------
33 Rowid 67 Rowid 100Rowid 134Rowid 167Rowid 300Rowid

Feuilles
( Leaf Blocks) Cette Figure représente Une Structure de l’index L’index B-TREE
Les Index

Soient les enregistrement suivants : organisés selon


l’order croissant ou bien par order d’insertion
22
22 10
6
-3
-3
12
88
25
Comment rechercher 55
( supprimer insérer ) un
enregistrement ? -5
20
20
Combien ça va nécessiter 66
d’opération ? 77
30
30
22

35
35
Les Index
Comment ça marche L’index B-Tree ( L’arbre Binnaire)

Les valeurs inférieures sont à gauche


Les valeurs Supérieures sont à droit
Les Index
Comment ça marche L’index B-Tree ( L’arbre Binnaire)

La Recherche
5

20

10

6
Les Index
Comment ça marche L’index B-Tree ( L’arbre Binnaire)

L’Insertion
5 11

20

10

11
Les Index
Comment ça marche L’index B-Tree ( L’arbre Binnaire)

Suppression
5 7

20

10

7
Les Index
Comment ça marche L’index B-Tree ( L’arbre Binnaire)

Suppression

5 2

2
Les Index
Comment ça marche L’index B-Tree ( L’arbre Binnaire)

Suppression
20

20
22

30

25

22
Les Index
L’index Bitmap Select nom, prenom, job_id from employees

ID NOM Prenom Job_id-


L’index Bitmap n’est pas utilisé (exploité) quand ---------------------------------------------------------------------------
101 Neena Kochhar AD_VP
la clause est ( not like , not in , different <>, null) 102 Lex De Haan AD_VP
103 Alexander Hunold IT_PROG
104 Bruce Ernst IT_PROG
107 Diana Lorentz IT_PROG
1 2 3 4 5 6 7 8 … 108 Nancy Greenberg FI_MGR
109 Daniel Faviet FI_ACCOUNT
ST_CLERK 0 0 0 0 0 0 0 0 .. 110 John Chen FI_ACCOUNT
111 Ismael Sciarra FI_ACCOUNT
ST_MAN 0 0 0 0 0 0 0 0 .. 112 Jose Manuel Urman FI_ACCOUNT
113 Luis Popp FI_ACCOUNT
FI_ACCOUNT 0 0 0 0 0 0 1 1 .. 115
116
Alexander
Shelli Baida PU_CLERK
Khoo PU_CLERK

117 Sigal Tobias PU_CLERK


PU_CLERK 0 0 0 0 0 0 0 0 .. 118 Guy Himuro PU_CLERK
119 Karen Colmenares PU_CLERK
IT_PROG 0 0 1 1 1 0 0 0 .. 120 Matthew Weiss ST_MAN
121 Adam Fripp ST_MAN
AD_VP 1 1 0 0 0 0 0 0 .. 122 Payam KauflingST_MAN
123 Shanta Vollman ST_MAN
124 Kevin Mourgos ST_MAN
125 Julia Nayer ST_CLERK
126 Irene Mikkilineni ST_CLERK
127 James Landry ST_CLERK
Select * from employees where job_id like 128 Steven Markle ST_CLERK
105 David Austin IT_PROG
‘FI_ACCOUNT’ 106 VallPataballa IT_PROG
21
Administration des bases de données sous Oracle
Chapitre 3: Créer une base de données
Création et Gestion des tablespaces et tables :
Les indexes (suite)
Exemple de création d’index

Créer l’index :

CREATE UNIQUE INDEX idx_clients ON clients(no_client) tablespace index1

CREATE BITMAP INDEX idx_empl ON departments (department_name)


tablespace indextbs

Supprimer l’index  DROP index idx_empl


Les Séquence

Une séquence est un objet de base de données Oracle, au même titre


qu'une table, une vue,
Elle appartient à un utilisateur, on peut donc si on a les droits
nécessaires :
La manipuler,
La modifier,
La supprimer
…..
Les Séquence
Définition d'une séquence

Définir une séquence équivaut à définir une suite de nombres entiers.


L'évolution de cette suite est régie par un certain nombre de paramètres,
L'utilisation d'une séquence permet donc d'avoir à disposition une suite
de valeurs.

Ceci pour : Générer des clés uniques dans des tables avoir un compteur à
titre informatif, que l'on incrémente quand on veut etc...
Création D’une Séquence
L'ordre SQL minimal de création d'une séquence :
 SQL> CREATE SEQUENCE ma_sequence;

La séquence a 2 Pseudo-colones

1- La pseudo-colonne CURRVAL retourne la valeur courante de la séquence.


2- La pseudo-colonne NEXTVAL incrémente la séquence et retourne la nouvelle valeur.
SQL> select ma_sequence.nextval from dual;
NEXTVAL
1
SQL> select ma_sequence.currval from dual;
CURRVAL
---------
1
SQL> select ma_sequence.nextval from dual;
NEXTVAL
---------
2
Création D’une Séquence
D’autre option de création d'une séquence :

Valeur initiale et incrément:


Les paramètres  START WITH et INCREMENT BY.
RQ: ces paramètres  peuvent s'utiliser indépendamment. 
CREATE SEQUENCE ma_sequence START WITH 4 INCREMENT BY 2;
Dans cet exemple, on a défini la suite 4, 6, 8, 10,12, 14, 16,…., etc
Pour faire une suite descendante, il suffit d'indiquer une valeur négative au paramètre
CREATE SEQUENCE ma_sequence INCREMENT BY -10;
Valeur MAXI et MINI 66 66 
CREATE SEQUENCE ma_sequence MAXVALUE MINVALUE;
CREATE SEQUENCE ma_sequence MINVALUE -20 MAXVALUE 40;
CREATE SEQUENCE ma_sequence START WITH 1 INCREMENT BY 1 MAXVALUE 9999;
CREATE SEQUENCE ma_sequence START WITH -1 INCREMENT BY -1 MINVALUE -9999;
Création D’une Séquence
Reboucler la séquence

Lorsque la séquence atteint sa valeur maxi (resp. mini), on peut lui demander de s'arrêter
(Oracle retournera une erreur lors de la prochaine tentative d'utilisation de NEXTVAL), ou de
reprendre à sa valeur mini (resp. maxi) et reprendre son compte . 
Cas N°1 :

CREATE SEQUENCE ma_sequence_NC START WITH 1 MINVALUE -10 MAXVALUE 10


NOCYCLE;
Cette séquence comptera jusqu'à 10 puis retournera une erreur au NEXTVAL suivant 

Cas N°2 :
CREATE SEQUENCE ma_sequence_WC START WITH 1 MINVALUE -10 MAXVALUE
10 CYCLE;
Cette séquence (ma_sequence_WC ) comptera de 1 à 10, puis de -10 à 10, puis de -10 à 10... :

Par défaut, une séquence ne reboucle pas (cas n°1)


Création D’une Séquence
Exemple d’utilisation d’une la séquence

SQL> create sequence seq_no_cli start with 1000 increment by 100;

SQL> insert into clients (no, nom) values (seq_no_cli.nextval,'Martin');

Pour Supprimer une Séquence: DROP SEQUENCE nom_de_la_sequence;

Pour Réinitialiser une séquence il faut passer un Programme PL/SQL


Les synonymes
Un Synonyme: est un alias d’un objet base de données (tables, vues,indexes, synonymes,
séquences, déclencheurs, procédures, fonctions…)
 
 Si on crée le synonyme  emp sur la tables hr.employee, alors manipuler emp, revient
à manipuler hr.employee :

SELECT * FROM employee équivaut à SELECT * FROM hr.employee

 Il existe deux types de synonymes :

 Synonyme privé : accessible uniquement à partir du schéma dans lequel il a été créé

CREATE SYNONYM nom_syn FOR schema.objet

 Synonyme public : accessible à partir de tout schéma

CREATE PUBLIC SYNONYM nom_syn FOR schema.objet


Transactions

Cohérance et Transaction :

Un SGBD doit supporter


-Plusieur utilisateur  utilisation en parallele
- Effectuant de lecture et écriture
-Toue en garantissant la cohérence de la base de données

Une transaction est une suite d’instructions qui réussissent ou qui échouent en totalité (pas
de réussite partielle).

Ou encore c’est ensemble des order SQL indivisible faisant passer la base de donnée d’un
etat cohérant à un autre en une seule etape

.
Transactions
On dit qu’une transaction est ACID :

– Atomique, au sens où on ne peut pas la diviser en une partie qui


échoue et une partie qui réussit ;

– Cohérente, au sens où une fois la transaction terminée, la base est


de nouveau dans un état cohérent ;

– Isolée, au sens où une transaction considère que, pendant son


exécution, les données qu’elle manipule ne sont pas modifiées par
une autre transaction ;

– Durable, au sens où les modifications opérés par la transaction


sont enregistrées de façon permanente (et recouvrables en cas de
reconstruction de la base).
Transactions
Opération commit , rollback

Commit : Validation entière d’une transaction

Rollback : Annule entièrement une transaction

Savepoint : point de contrôle, état de la base où l’on pourra revenir plus tard

Rollback to savepoint nom_save_point


Transactions

Exemples de transactions

Insert into tabale_1 values ( ‘val1’, ’val2 ‘….,’valn’);

Transaction 1 Delete from Table_2 where champ1 like ‘toto’;

Commit;

Insert into tabale_3 values ( ‘val1’, ’val2 ‘….,’valn’);


Transaction 2
Commit;

Vous aimerez peut-être aussi