You are on page 1of 87

SGBD :

Le langage SQL
(LDD : Langage de Dfinition des Donnes)
SAGAR Samya

Introduction

SAGAR Samya

Prsentation de SQL
SQL = Structured Query Language
Langage de gestion de bases de donnes relationnelles pour;
Dfinir les donnes (LDD ; Langage de Dfinition des Donnes gres)
ordres CREATE, ALTER,DROP (Cration des objets).

Manipuler les donnes (LMD ; Langage de Manipulation des Donnes)


ordres UPDATE, INSERT, DELETE (mise jour des donnes);
ordre SELECT (Interrogation des donnes).

aux Donnes)
ordres GRANT, REVOKE (gestion des droit);
ordres COMMIT, ROLLBACK (gestion des transactions).

SAGAR Samya

Norme SQL92 (ou SQL2)


International
Organisation for Standardization)
Presque compltement implmente par les principaux
SGBD : Oracle, DB2, Informix, MySQL, PostsgreSQL,

La norme SQL99 (ou SQL3) est dj l depuis longtemps

SAGAR Samya

Utilisation de SQL

Interactif (SQL*Plus)
Intgr dans un programme (PLSQL)

SAGAR Samya

Oracle
SGBDR (Relationnel) qui utilise le langage SQL
Langage procdural PL/SQL (dit L 4G) propritaire
Nombreux programmes utilitaires
SQL*PLUS : SQL interactif, avec quelques ajouts
SQL*FORMS : saisir/voir des donnes avec des formulaires
SQL*REPORTWRITER : rapports imprims
...

SAGAR Samya

Oracle
Pour chaque utilisateur reconnu de la base de
donnes, un schma , aussi appel compte , est cre

Le nom du schma est le mme que celui de

vues, squences, synonymes, index, clusters,


procdures, fonctions, packages et liens)
7

SAGAR Samya

Oracle
Par dfaut, chaque utilisateur a accs toutes les
objets de mme nom
La protection des objets de la base est dcentralise;
tout objet a un utilisateur crateur, qui possde tous
les droits (consultation, modification et suppression)
sur cet objet

moins que le crateur ne le leur en accorde


explicitement
8

SAGAR Samya

Oracle_Exemple
Samya cre la table Client . La table Client est
dans le schma Samya . Pour dsigner sa table Client
Samya utilise le mot Client
Samya.Client mais elle peut le faire si elle veut
Mohamed ne peut accder la table Client de
Samya
Samya donne le droit de consultation sur sa table
Client
Mohamed .
Mohamed peut dsormais accder la table Client
de Samya (en consultation). Pour dsigner la table Client de
Samya
Mohamed doit employer le mot
Samya.Client
Mohamed
Client .
Mohamed dsignera sa table Client par Client (ou
Mohamed.Client ) et celle de Samya par Samya.Client
9

SAGAR Samya

Objets manipuls par SQL

Identificateurs
Identificateurs pour les objets manipuls
30 caractres au plus
lettres, chiffres, _, $ ou # (commence par une lettre)
pas un mot clef

Quelques mots clefs : ASSERT, ASSIGN, AUDIT,


COMMENT, DATE, DECIMAL, DEFINITION,
FILE, FORMAT, INDEX, LIST, MODE, OPTION,
PARTITION, PRIVILEGES, PUBLIC, SELECT,

10

SAGAR Samya

Objets manipuls par SQL

Tables
Relations stockes sous forme de tables composes de
lignes et de colonnes
schma (pour runir tous les objets lis un mme
thme)
Sous Oracle, le schma est remplac par le nom de

11

SAGAR Samya

Objets manipuls par SQL

Tables
Exemple de table ; DEPT

12

dept

nomD

Lieu

10

Finances

Gabs

20

Recherche

Sousse

30

Ventes

Kairouan

SAGAR Samya

Objets manipuls par SQL

Tables
Exemple de table ; EMP

13

matr

nomE

sal

com

sup

dept

1200

Med

2500

300

2200

10

2200

Mahmoud

3000

500

1780

Samya

2500

10
2200

SAGAR Samya

20

Objets manipuls par SQL

Colonnes

2 colonnes dans 2 tables diffrentes peuvent avoir le


mme nom
table laquelle elle appartient (obligatoire en cas
DEPT.dept,
SAGAR.DEPT.dept

14

SAGAR Samya

Types de donnes

15

SAGAR Samya

Types de donnes SQL2


Types numriques
Types pour les chanes de caractres

telles que les images et les sons


type

16

SAGAR Samya

Types numrique (1)


Nombres entiers :
SMALLINT sur 2 octets
INTEGER sur 4 octets
virgule flottante :
REAL
DOUBLE PRECISION (ou FLOAT )
Constantes : 253.8, -10, 1.3E -5

17

SAGAR Samya

Types numriques (2)


Nombres dcimaux nombre fixe de dcimales :
DECIMAL(nbChiffres, nbDcimales)
NUMERIC(nbChiffres, nbDcimales)
Prcision impose
pour les calculs

NUMERIC(8, 2) ou DECIMAL(8, 2)
6 chiffres avant la virgule et 2 aprs

Constantes : 253.8, -10

18

SAGAR Samya

Types chanes de caractres


CHAR( longueur)
chanes de caractres avec un nombre fixe de caractres

VARCHAR(longueurMaximum)
chanes de caractres avec un nombre variable de caractres
(mais un nombre maximum de caractres)

CHAR(5) : chane de 5 caractres


VARCHAR(20) : chane de 20 caractres au plus
Constante : 'Comptabilit', 'Aujourd''hui'

' doubl

19

SAGAR Samya

Types temporels
DATE pour les dates
TIME pour les heures, minutes et secondes
TIMESTAMP pour un moment prcis :
la microseconde (un millionime de seconde)

INTERVAL permet d'indiquer un intervalle de temps.

20

SAGAR Samya

Type binaires
Ce type permet d'enregistrer des donnes telles que les
images et les sons, de trs grande taille et avec divers
formats.

BIT
Exemples :
BIT(1)
BIT(4)

Note :
Pas support par Oracle

21

SAGAR Samya

Oracle accepte les types numriques SQL2 mais il les


traduit dans ses propres types

NUMBER
nombre virgule flottante avec jusqu' 38 chiffres significatifs

NUMBER(nbChiffres [, nb

-dcimales])

nombre dcimal d'au plus nbChiffres chiffres dont nbdcimales


aprs la virgule

22

SAGAR Samya

CHAR , comme la norme SQL2


VARCHAR est accept mais Oracle conseille d'utiliser
VARCHAR2 qui a les mmes proprits
Note : (la taille maximum est de 2000 caractres)

23

SAGAR Samya

Le type DATE remplace les types DATE et TIME de


SQL2

DATE correspond une date avec une prcision jusqu' la


seconde

le format dpend de la
localisation de la base

Note : Ne pas oublier de donner 4 chiffres pour l'anne,


sinon la date risque d'tre mal interprte par Oracle

24

SAGAR Samya

Interrogations et Mise jour


des donnes
(LMD)

25

SAGAR Samya

Remarque
Voir cours Base de donnes ; semestre 1 _ 2INFO

26

SAGAR Samya

27

SAGAR Samya

Syntaxe simplfie :

CREATE TABLE table


colonne1 type1,
colonne2 type2,
. . .
. . .)

Exemple :

create table article (


ref char(5) not null ,
nom varchar (20),
prix numeric (9,2),
dateMAJ date);
28

Option not null


si la colonne
doit obligatoirement
tre renseigne
SAGAR Samya

Valeur par dfaut


On peut ajouter aprs la description d'une colonne l'option
NOT NULL qui interdira que cette colonne ne contienne pas
la valeur NULL.

On peut donner une valeur par dfaut pour une colonne :


create table dept (
numDept integer not null ,
nomDept varchar (20),
ville varchar (30) default

On peut aussi donner une fonction comme valeur par dfaut ;


par exemple, default sysdate

29

SAGAR Samya

DESCRIBE
Cette

SQL > describe article;


Name
Null ?
REF
Not null
NOM
PRIX
DATEMAJ

(pas SQL) affiche

Type
CHAR(5)
VARCHAR(20)
NUMBER(9,2)
DATE

Mme si le type
donn la
cration est
DECIMAL
30

SAGAR Samya

Une commande est annule par le SGBD si


son excution viole une des contraintes

31

SAGAR Samya

Les contraintes possibles sont :


PRIMARY KEY

: cl primaire
: cl trangre

UNIQUE : 2 lignes ne peuvent avoir la mme valeur pour les colonnes


spcifies

CHECK : contrainte de domaine, ou autre ; porte sur une seule ligne

2 types de contraintes :
contrainte de colonne
concerne une seule colonne
elle suit la dfinition de la colonne dans un ordre CREATE TABLE

contrainte de table
concerne une ou plusieurs colonnes
elles se place au mme niveau que les dfinition des colonnes dans un ordre
CREATE TABLE ou ALTER TABLE.
32

SAGAR Samya

Dfinition des contraintes


CONSTRAINT nom -contrainte dfinition -contrainte

Les contraintes sont dfinies dans les commandes


CREATE (ou ALTER ) TABLE
l'intrieur des dfinitions de colonnes pour les contraintes
de colonne
au mme niveau que les dfinitions de colonnes pour les
contraintes de table

Chaque contrainte doit tre nomme :


Ceci permettra de la dsigner par un ordre ALTER TABLE
Le nom d'une contrainte doit tre unique parmi toutes les
contraintes de toutes les tables de la base de donnes.
33

SAGAR Samya

Cl primaire

create table emp (


matr integer constraint
. . .

pkemp primary key ,

Sinon, il faut ajouter une contrainte de table :


create table participation (
matr integer ,
codeP integer ,
. . .,
constraint pkpar primary key( matr , codeP ))

Remarque : Contrainte sur les cls primaires


Aucune des colonnes de la cl primaire ne peut avoir la valeur
34

SAGAR Samya

null

Contrainte d'unicit : UNIQUE


(pour une contrainte sur une table :)

UNIQUE (colonne1, colonne2,...)


(pour une contrainte sur une colonne :)

UNIQUE

Interdit qu'une colonne (ou la concatnation de plusieurs


colonnes) contienne deux valeurs identiques.
Remarques :
2 lignes de la table ne pourront avoir la mme valeur (sauf NULL)
Correspond un identificateur (cl candidate si minimal), si on
ajoute une contrainte NOT NULL

35

SAGAR Samya

Attention: Erreur ne pas faire


Si une table a une cl primaire forme de 2 colonnes, il ne
faut pas dclarer 2 contraintes de colonne
Mais , il faut dclarer une seule contrainte de table
portant sur les 2 colonnes :

constraint pkpar primary key(matr,


codeP)

36

SAGAR Samya

Cl trangre
Si une seule colonne forme la cl trangre, le plus simple est
REFERENCES table -ref [(col1)]

create table emp (


. . .,
dept integer constraint
dept (dept ))

r_dept references

Elle peut tre une contrainte de table :

Optionnel si
colonne rfrence
est cl primaire

REFERENCES table -

create table emp (


Il faut ajouter
. . .,
foreign key
dept integer ,
constraint r_dept foreign key (dept )
37
SAGAR Samya
references
dept (dept ))

Cls trangres : Remarques


Cette contrainte ne permettra pas d'insrer une ligne de
la table si la table table - ref ne contient aucune ligne dont
la concatnation des valeurs de col1, col2,... est gale la
concatnation des valeurs de colonne1, colonne2,...
doivent avoir la contrainte :
PRIMARY KEY ou UNIQUE

constraint r_dept references dept(dept)


dept doit tre cl
primaire, ou
unique
38

SAGAR Samya

Cls trangres : Options


Option ON DELETE CASCADE
Sans

create table emp (


. . .
dept integer
constraint r_dept references

dept )

On ne peut supprimer un dpartement s'il est rfrenc par


une ligne de la table emp
Avec

create table emp (


. . .
dept number (2)
constraint r_dept references
on delete cascade)

dept

La suppression d'un dpartement entrane automatiquement la


suppression de toutes les lignes de la table emp qui
rfrencent ce dpartement
39

SAGAR Samya

Cls trangres : Options


Option ON DELETE SET NULL
Dans ce cas, la cl trangre sera mise NULL si la ligne
qu'elle rfrence dans table - ref est supprime.

Autres options : La norme SQL2 offre 4 autres options qui


ne sont pas implmente dans Oracle :
ON DELETE SET DEFAULT met une valeur par dfaut dans la cl
trangre quand la cl primaire rfrence est supprime.
ON UPDATE CASCADE modifie la cl trangre si on modifie la cl
primaire (ce qui est viter).
ON UPDATE SET NULL met NULL dans la cl trangre quand la
cl primaire rfrence est modifie.
ON UPDATE SET DEFAULT met une valeur par dfaut dans la cl
trangre quand la cl primaire rfrence est modifie.
40

SAGAR Samya

Contrainte CHECK
CHECK(condition )
Donne une condition que les colonnes de chaque ligne
devront vrifier.
On peut ainsi indiquer des contraintes d'intgrit de
domaines.
Cette contrainte peut tre une contrainte de colonne ou
de table.
Si c'est une contrainte de colonne, elle ne doit porter que
sur la colonne en question.

41

SAGAR Samya

Exemples de contraintes

CREATE TABLE EMP (


MATR INTEGER CONSTRAINT KEMP PRIMARY KEY ,
NOME VARCHAR(10) CONSTRAINT NOM_UNIQUE UNIQUE
CONSTRAINT MAJ CHECK (NOME = UPPER(NOME)
,
.........
DEPT INTEGER CONSTRAINT R_DEPT REFERENCES
DEPT(DEPT)
CONSTRAINT NDEPT CHECK (DEPT IN (10,
20, 30, 35, 40)))

42

SAGAR Samya

Modification des contraintes


Des contraintes d'intgrit peuvent tre ajoutes,
supprimes ou renommes, par la commande ALTER
TABLE .
On peut aussi modifier l' tat de contraintes par MODIFY
CONSTRAINT .
On ne peut ajouter que des contraintes de table.
Si on veut ajouter (ou modifier) une contrainte de
colonne, il faut modifier la colonne

43

SAGAR Samya

Exemples de modification de contraintes

ALTER TABLE emp


DROP CONSTRAINT
ADD CONSTRAINT

44

nom_unique
sal_min CHECK (sal + coalesce( comm ,0)>50)

RENAME CONSTRAINT

nom1 TO nom2

MODIFY CONSTRAINT

sal_min DISABLE

SAGAR Samya

Vrification des contraintes


En fonctionnement normal les contraintes sont vrifies
chaque requte SQL
Cette vrification peut tre gnante, en particulier lors de
Exemple : si on a cette contrainte sur la colonne SUP de
la table EMP :

constraint sup_ref_emp references EMP


La contrainte oblige ajouter les suprieurs en premier, avant
les employs.
Tout se passera bien si tous les employs sont ajouts en une
seule transaction et si cette contrainte n'est vrifie qu' la fin
de la transaction.
45

SAGAR Samya

Contraintes diffrables
contrainte peut tre diffre la fin de la
transaction.
Si une contrainte est diffre et si elle n'est pas
vrifie au moment du commit de la transaction,
toute la transaction est invalide (rollback)
automatiquement par le SGBD.

46

SAGAR Samya

Diffrer une contrainte


2 tapes :
1. Contrainte diffrale : Au moment de la dclaration de la
contrainte, on indique qu'on pourra diffrer sa vrification
:
CONSTRAINT truc def -contrainte [NOT] DEFERRABLE
[INITIALLY DEFERRED | IMMEDIATE]

La valeur par dfaut est NOT DEFERRABLE.


Si une contrainte peut tre diffre, elle ne le sera qu'aprs la
deuxime tape. On peut changer a en donnant la clause
INITIALLY DEFERRED qui diffre tout de suite la
contrainte pour toutes les transactions.
47

SAGAR Samya

Diffrer une contrainte


2. On diffre la vrification de contraintes juste pour la
transaction en cours, avec la commande :
set CONSTRAINTS {liste de contraintes | ALL} DEFERRED

Si elle est INITIALLY DEFERRED, elle sera diffre par dfaut


au dbut de chaque transaction. On peut ne plus la diffrer
pour le temps d'une transaction en lanant la commande :
set CONSTRAINTS {liste de contraintes | ALL} IMMEDIATE

48

SAGAR Samya

Diffrer une contrainte : Exemple


create table emp (
matr integer constraint emp_pk primary key,
. . .,
sup integer CONSTRAINT EMP_REF_SUP REFERENCES EMP DEFERRABLE ,
. . .);
SET CONSTRAINTS EMP_REF_SUP DEFERRED ;
insert into emp values
(7499, 'Biraud', 'commercial', 7698, '20/2/1981',
12800.00, 2400.00, 30);
. . .
insert into emp values
(7698, 'Leroy', 'directeur', null, '19/3/1988',
15000.00, null, 30);
COMMIT SET CONSTRAINTS EMP_REF_SUP IMMEDIATE ;

49

SAGAR Samya

Diffrer une contrainte


On peut modifier l'tat d'une contrainte diffrable par la
commande ALTER TABLE
Exemple :
ALTER TABLE emp
MODIFY CONSTRAINT ref_dept_emp INITIALLY DEFERRED

Si on veut rendre une contrainte diffrable (ou l'inverse),


on doit supprimer la contrainte et la recrer ensuite.

50

SAGAR Samya

Invalider des contraintes avec Oracle


Oracle

Utile pour, par exemple, amliorer les performances lors

ALTER TABLE table {DISABLE | ENABLE} constraint nom - contrainte

Exemple :
ALTER TABLE EMP DISABLE CONSTRAINT NOM_UNIQUE

La clause ENABLE a une option qui permet de conserver dans


une table les lignes qui ne respectent pas la contrainte
ractive.
51

SAGAR Samya

Cration et descriptions

52

SAGAR Samya

Schma
CREATE SCHEMA AUTHORIZATION
Un schma est un ensemble d'objets (tables, vues, index, autorisations,
etc...) grs ensemble.
On pourra ainsi avoir un schma li la gestion du personnel et un autre
li la gestion des clients.
Cette notion introduite par la norme SQL2 n'est pas vraiment prise en
compte par Oracle qui identifie pour le moment un nom de schma avec
un nom d'utilisateur.
Le catalogue , est un ensemble de schmas.
Un catalogue doit ncessairement comprendre un schma particulier qui
correspond au dictionnaire des donnes
.

53

SAGAR Samya

CREATE TABLE table


permet d'insrer pendant la cration de la table des lignes venant d'autres
tables.
On peut aussi spcifier des contraintes d'intgrit de colonne ou de table.
Il faut videmment que les dfinitions des colonnes de la table cre et du
rsultat de la slection soient compatibles en type et en taille.
On peut galement ne pas donner les noms et type des colonnes de la
table cre.

create table dept2 ( cle integer , nom varchar (20))


as select dept, nomd from dept;
create table dept10 as select * from emp
where dept = 10;
54

SAGAR Samya

Modifier la dfinition d'une tableALTER


Ajout d'une colonne - ADD
ALTER TABLE table
ADD (col 1 type 1, col 2 type 2

Exemple :
alter table personne
add (email_valide char(1)
constraint personne_email_valide
check( email_valide in ('o', 'n')));

55

SAGAR Samya

Modifier la dfinition d'une tableALTER


Modification d'une colonne

MODIFY

ALTER TABLE table

Note : On ne peut modifier une colonne que si la colonne ne contient


que des valeurs null ou si la nouvelle dfinition est compatible avec les
valeurs dj entres dans cette colonne
on ne peut pas diminuer la taille maximale d'une colonne.
on ne peut spcifier 'NOT NULL' que si la colonne ne contient pas de valeur
nulle.
Il est toujours possible d'augmenter la taille maximale d'une colonne.
On peut donner une contrainte de colonne dans la nouvelle dfinition de la
colonne.
et on peut dans tous les cas spcier 'NULL' pour autoriser les valeurs nulles.
56

SAGAR Samya

Modifier la dfinition d'une tableALTER


Modification d'une colonne

MODIFY

Exemples

alter table personne


modify (
prenoms null ,
nom varchar (50));
alter table personne
modify (
sexe char(1)
constraint personne_sexe_ck check(sexe
in ('m', 'f')));

57

SAGAR Samya

Modifier la dfinition d'une tableALTER


Suppression d'une colonne - DROP COLUMN
ALTER TABLE table
DROP COLUMN colonne;

Important
rfrence par une cl trangre
sur laquelle un index a t construit

Exemple :
ALTER TABLE EMP
DROP COLUMN sal;

58

SAGAR Samya

Modifier la dfinition d'une tableALTER


Renommer une colonne

RENAME COLUMN

ALTER TABLE table


RENAME COLUMN ancien_nom TO nouveau_nom ;

59

SAGAR Samya

Modifier la dfinition d'une tableALTER


Renommer une table

RENAME TO

On peut renommer une table :


ALTER TABLE ancienNom
RENAME TO nouveauNom

Oracle offre une commande quivalente pour renommer


une table
RENAME ancienNom

60

TO nouveauNom

SAGAR Samya

Supprimer une table


DROP TABLE

table

permet de supprimer une table :


les lignes de la table et la dfinition elle
dtruites.

-mme de la table sont

L'espace occup par la table est libr.

Il est impossible de supprimer une table si la table est


rfrence par une contrainte d'intgrit rfrentielle.
Une variante Oracle (pas SQL2 ) de la commande permet de
supprimer les contraintes d'intgrit et la table :
DROP TABLE
61

table CASCADE CONSTRAINTS


SAGAR Samya

Si une table doit tre utilise par plusieurs utilisateurs, il peut


tre intressant de lui donner un synonyme public pour que
les utilisateurs ne soient pas obligs de prfixer le nom de la
table par le nom de son crateur.
CREATE [ PUBLIC | PRIVATE ] SYNONYM
toto.emp

employe FOR

Pour chercher des synonymes dans le dictionnaire des


donnes :
select synonym_name , table_name , owner
from all_synonyms
where table_owner

Remarque : on peut crer un synonyme une vue.


62

SAGAR Samya

Vue
Une vue est une vision partielle ou particulire des

select :
les donnes de la vue sont celles retournes par le select

Les utilisateurs peuvent consulter ou modifier la base


travers la vue comme si c'tait une table relle
Seule la dfinition de la vue est enregistre dans la base,
et pas les donnes de la vue.
table virtuelle .

63

SAGAR Samya

Cration et suppression d'une vue


CREATE VIEW
[WITH CHECK OPTION]
Le select peut contenir toutes les clauses d'un select sauf order by
La spcification des noms des colonnes de la vue est facultative : par
dfaut, sont ceux des colonnes rsultats du SELECT.
Si certaines colonnes rsultats du SELECT sont des expressions sans
nom, il faut alors obligatoirement spcifier les noms de colonnes de la
vue.

Exemple :

create view emp10 as


select * from emp
where dept = 10;

DROP VIEW vue


64

SAGAR Samya

Exemple de cration de vues

create view deptStat (nom, inf, moy, max, total)


as
select nomd , min(sal), avg(sal), max(sal), sum(sal)
from emp natural join dept
group by dept.nomd

65

SAGAR Samya

Utilisation des vues dans un select


Dans un select on peut utiliser une vue la place d'une
table

select * from emp10 ;


select nom, total
from deptStat
where total > 100000;

66

SAGAR Samya

Suppression avec une vue


On peut effectuer des delete travers une vue, sous
les conditions suivantes sur le select qui dfinit la vue :
une seule table (pas de jointure)
pas de group by
pas de distinct
pas de fonction de groupe

67

SAGAR Samya

Modification avec une vue


On peut effectuer des update travers une vue, sous
les conditions du delete , et en plus :
les colonnes modifies sont des colonnes relles de la table
(pas des expressions)

Exemple :
update emp10
set sal = sal * 1.1;

Ainsi, il est possible de modifier les salaires du dpartement 10


travers la vue EMP10. Toutes les lignes de la table EMP avec
DEPT = 10 seront modifies.

68

SAGAR Samya

Insertion avec une vue


On peut effectuer des insert travers une vue, sous
les conditions du update , et en plus :
toute colonne not null de la table reprsente par la vue
est prsente dans la vue

Exemple
insert into emp10 ( matr , nome

69

SAGAR Samya

Les Vues et Oracle


Les restrictions donnes ci -dessus ( suppression, modification,
insertion avec une vue ) sont les restrictions de la normeSQL2.
Oracle permet de modifier les donnes d'une table sous
jacente par l'intermdiaire d'une vue qui comporte une
jointure lorsque la vue prserve la cl de la table.
Exemple:
CREATE VIEW EMP2 AS
SELECT matr , nomE , nomD
FROM EMP NATURAL JOIN DEPT

L'instruction suivante est permise sous Oracle :


UPDATE EMP 2
SET nomE
where nomE
70

SAGAR Samya

Option CHECK
Une vue peut crer des donnes qu'elle ne pourra pas
visualiser.
On peut ainsi ajouter un employ du dpartement 20 avec la vue
EMP10.

Si la vue a t cre avec " WITH CHECK OPTION ", toute


modification travers de la vue ne peut donner des donnes
qui ne seraient pas affiches par la vue
Exemple :

create view emp10 AS


select * from emp
where dept = 10
with check option
update emp10
set dept = 20

71

interdit

SAGAR Samya

Utilit des vues


Les vues permettent de dissocier
la faon dont les utilisateurs voient les donnes
du dcoupage en tables

On favorise ainsi l'indpendance entre les programmes et


les donnes
Si un programme utilise des vues, on peut, par exemple,
remplacer une table par 2 tables sans modifier le
programme de consultation des donnes ; il suffit de
modifier la dfinition des vues

72

SAGAR Samya

Utilit des vues


Peuvent simplifier la consultation de la base en
enregistrant des select complexes
Participent la protection des donnes :
on peut donner accs une vue, sans donner accs la table
sous -jacente
lignes d'une table
les modifications des donnes peuvent tre restreintes avec la
clause WITH CHECK OPTION

73

SAGAR Samya

Index
Un index utilise des techniques informatiques pour
rendre trs rapides les accs aux valeurs d'une colonne
Exemple :
select * from emp
where nomE

est trs long si la table emp contient des millions

de lignes

Un index bien construit permet d'obtenir l'emplacement des


informations sur Mahmoud en quelques accs disques.

Un index peut porter sur plusieurs colonnes : la cl


d'accs sera la concatnation des diffrentes colonnes.
On peut crer plusieurs index indpendants sur une
mme table.
74

SAGAR Samya

Cration et suppression d'un index


CREATE [UNIQUE] INDEX
ON table (col 1, col 2

nomIndex

Exemple :
create index nomE on emp(nomE);

Le nom choisi doit tre unique parmi tous les index de


toutes les tables
Oracle cre automatiquement un index sur les colonnes
qui ont des contraintes Primary key et Unique

Suppression :
DROP INDEX
75

nomIndex
SAGAR Samya

Utilisation d'un index


Aprs sa cration un index est gr automatiquement par
le SGBD
Il est transparent pour l'utilisateur : celui -ci interroge la
base de la mme faon que si l'index n'existait pas
Le SGBD peut utiliser un index s'il pense que la requte
sera acclre
Les index ralentissent les modifications des donnes

76

SAGAR Samya

Squences et Gnration de cls primaires


Utilit
Les identifiants de lignes non significatifs sont prfrables
entiers
Le problme : gnrer des entiers sans que 2 lignes puissent
avoir le mme identifiant, mme en situation de concurrence
entre plusieurs transactions

Solution 1 (Une mauvaise solution)


Prendre le plus grand nombre dj utilis dans la table comme
identifiant et ajouter 1:
Exemple :

lock table;
val = select max(cle) from table;
insert into table
commit;

77

SAGAR Samya

Squences et Gnration de cls primaires


Inconvnients de la solution 1
ncessite un accs la base
il faut trouver le plus grand
ncessite un blocage de la table pour viter que 2 transactions

Si on veut garder un historique, on peut se retrouver avec

78

SAGAR Samya

Squences et Gnration de cls primaires


Solution 2

Une table contient la prochaine cl attribuer


La valeur est incrmente chaque nouvelle cl
Variantes
Variante 1 :
Une seule table contient une seule valeur utilise pour les identifiants
de toutes les tables

Variante 2 :
Une table par cl

Variante 3 :
Quelle colonnes dans la table des cls ?
79

SAGAR Samya

Squences et Gnration de cls primaires


Exemple

lock table_cle;
update table_cle
set cle = cle + 1;
val = select cle from table_cle;
commit;
insert into table
commit;
80

SAGAR Samya

Squences et Gnration de cls primaires


Inconvnients de l'utilisation d'une table

ncessite un accs la base (mais cette petite table est


conserve en mmoire centrale dans le cache du SGBD)

81

SAGAR Samya

Squences et Gnration de cls primaires


Squence
Les versions actuelles des SGBD offrent des solutions qui
Inconvnient : pas les mmes solutions dans tous les
SGBDs
Les squences sont disponibles avec
PostgreSQL

82

Oracle , DB2 et

SAGAR Samya

Crer une squence


CREATE SEQUENCE nom_squence
[INCREMENT BY entier1]
[START WITH entier2]

Exemple

create sequence seqdept


increment by 10
start with 10

83

SAGAR Samya

Utilisation des squences


Deux pseudo -colonnes permettent d'utiliser les squences :
CURRVAL retourne la valeur courante
NEXTVAL incrmente la squence et retourne la nouvelle valeur

insert into dept(dept, nomd )


values ( seqdept.nextval , 'Finances')

Remarques :
On ne peut utiliser CURRVAL
une fois dans la session de travail

NEXTVAL au moins

NEXTVAL modifie immdiatement la valeur future pour les autres


La valeur de CURRVAL ne dpend que des NEXTVAL lancs dans la mme
transaction

84

SAGAR Samya

Modification des squences


ALTER SEQUENCE nom_squence
INCREMENT BY entier 1

Exemple :

alter sequence seqdept


increment by 5
Remarque : On ne peut modifier la valeur de dpart
Informations sur les squences

select seqdept.currval from dual


Tables du dictionnaire des donnes :

USER_SEQUENCES et ALL_SEQUENCES
85

SAGAR Samya

Rcuprer plusieurs identificateurs


Mettre un incrment suprieur 1 permet d'obtenir
plusieurs identificateurs en un seul appel pour obtenir de
meilleures performances
Par exemple, si on veut des identificateurs pour des lignes
de factures, on en a souvent besoin de plusieurs en mme
temps
Remarque :
DB2 et SQL Server ont une clause

86

IDENTITY

SAGAR Samya

Conclusion

Les procdures stockes, les fonctions, ou encore les triggers


(voir cours PL/SQL).
Cluster (voir cour SGBD)

Les index et les vues sont fortement utiliss au niveau de


la performance de base de donnes et aux plans

87

SAGAR Samya

You might also like