Vous êtes sur la page 1sur 87
SGBD : Le langage SQL (LDD : Langage de Définition des Données) SAGAR Samya SAGAR
SGBD : Le langage SQL
(LDD : Langage de Définition des Données)
SAGAR Samya
SAGAR Samya
IntroductionIntroduction 2 SAGAR Samya
IntroductionIntroduction
2
SAGAR Samya
Présentation de SQL SQLSQL == StructuredStructured QueryQuery LanguageLanguage Langage de gestion de bases de données
Présentation de SQL
SQLSQL == StructuredStructured QueryQuery LanguageLanguage
Langage de gestion de bases de données relationnelles pour;
Définir les données
(LDD ; Langage de Définition des Données gérées)
ordres CREATE, ALTER,DROP (Création des objets).
ManipulerManipuler lesles donnéesdonnées
(LMD(LMD ;; LangageLangage dede ManipulationManipulation desdes Données)Données)
ordres UPDATE, INSERT, DELETE (mise à jour des données);
ordre SELECT (Interrogation des données).
aux Données)
ordresordres GRANT,GRANT, REVOKEREVOKE (gestion(gestion desdes droit);droit);
ordres COMMIT, ROLLBACK (gestion des transactions).
3
SAGAR Samya
Norme SQL92 (ou SQL2) International Organisation for Standardization) PresquePresque complètementcomplètement
Norme SQL92 (ou SQL2)
International
Organisation for Standardization)
PresquePresque complètementcomplètement implémentéeimplémentée parpar lesles principauxprincipaux
SGBD : Oracle, DB2, Informix,
MySQL, PostsgreSQL,
La norme SQL99 (ou SQL3) est déjà là depuis longtemps
4
SAGAR Samya
Utilisation de SQL Interactif (SQL*Plus) Intégré dans un programme (PLSQL) 5 SAGAR Samya
Utilisation de SQL
Interactif (SQL*Plus)
Intégré dans un programme (PLSQL)
5
SAGAR Samya
Oracle SGBDRSGBDR (Relationnel)(Relationnel) quiqui utiliseutilise lele langagelangage SQLSQL Langage procédural PL/SQL
Oracle
SGBDRSGBDR (Relationnel)(Relationnel) quiqui utiliseutilise lele langagelangage SQLSQL
Langage procédural PL/SQL (dit L 4G) propriétaire
NombreuxNombreux programmesprogrammes utilitairesutilitaires
SQL*PLUS : SQL interactif, avec quelques ajouts
SQL*FORMS : saisir/voir des données avec des formulaires
SQL*REPORTWRITER : rapports imprimés
6
SAGAR Samya
Oracle PourPour chaquechaque utilisateurutilisateur reconnureconnu dede lala basebase dede données, un schéma , aussi
Oracle
PourPour chaquechaque utilisateurutilisateur reconnureconnu dede lala basebase dede
données, un schéma , aussi appelé compte , est crée
LeLe nomnom dudu schémaschéma estest lele mêmemême queque celuicelui dede
vues, séquences, synonymes, index, clusters,
vues, séquences, synonymes, index, clusters,
procédures, fonctions, packages et liens)
7
SAGAR Samya
Oracle ParPar défaut,défaut, chaquechaque utilisateurutilisateur aa accèsaccès àà toutestoutes lesles objets de
Oracle
ParPar défaut,défaut, chaquechaque utilisateurutilisateur aa accèsaccès àà toutestoutes lesles
objets de même nom
La protection des objets de la base est décentralisée;
touttout objetobjet aa unun utilisateurutilisateur créateur,créateur, quiqui possèdepossède toustous
les droits (consultation, modification et suppression)
sur cet objet
à moins que le créateur ne le leur en accorde
explicitement
8
SAGAR Samya
Oracle_Exemple Samya Samya crée la table Client . La table Client est crée la table
Oracle_Exemple
Samya
Samya crée la table Client . La table Client est
crée la table
Client
. La table
Client
est
dans le schéma
dans le schéma Samya . Pour désigner sa table
. Pour désigner sa table
Client
Samya utilise le mot Client
Samya.Client
mais elle peut le faire si elle veut
Mohamed ne peut accéder à la table
Client de
Samya
SamyaSamya donnedonne lele droitdroit dede consultationconsultation sursur sasa tabletable
Client
Mohamed .
Mohamed peut désormais accéder à la table
Client
de Samya (en consultation). Pour désigner la table
Client de
Samya
Mohamed doit employer le mot
Samya.Client
Mohamed
Mohamed
Client .
Client
.
Mohamed désignera sa table Client par Client (ou
Mohamed.Client ) et celle de Samya par Samya.Client
9
SAGAR Samya
Objets manipulés par SQL IdentificateursIdentificateurs Identificateurs pour les objets manipulés 30 caractères au
Objets manipulés par SQL
IdentificateursIdentificateurs
Identificateurs pour les objets manipulés
30 caractères au plus
lettres, chiffres, _, $ ou # (commence par une lettre)
paspas unun motmot clefclef
Quelques mots clefs : ASSERT, ASSIGN, AUDIT,
COMMENT, DATE, DECIMAL, DEFINITION,
FILE, FORMAT, INDEX, LIST, MODE, OPTION,
PARTITION, PRIVILEGES, PUBLIC, SELECT,
PARTITION, PRIVILEGES, PUBLIC, SELECT,
10
SAGAR Samya
Objets manipulés par SQL TablesTables Relations stockées sous forme de tables composées de lignes et
Objets manipulés par SQL
TablesTables
Relations stockées sous forme de tables composées de
lignes et de colonnes
schémaschéma (pour(pour réunirréunir toustous lesles objetsobjets liésliés àà unun mêmemême
thème)
Sous Oracle, le schéma est remplacé par le nom de
11
SAGAR Samya
Objets manipulés par SQL TablesTables Exemple de table ; DEPT dept nomD Lieu 1010 FinancesFinances
Objets manipulés par SQL
TablesTables
Exemple de table ; DEPT
dept
nomD
Lieu
1010
FinancesFinances
GabèsGabès
20
Recherche
Sousse
30
Ventes
Kairouan
12
SAGAR Samya
Objets manipulés par SQL TablesTables Exemple de table ; EMP matr nomE sal com sup
Objets manipulés par SQL
TablesTables
Exemple de table ; EMP
matr
nomE
sal
com
sup
dept
12001200
MedMed
25002500
300300
22002200
1010
2200
Mahmoud
3000
500
10
1780
Samya
2500
2200
20
13
SAGAR Samya
Objets manipulés par SQL ColonnesColonnes 2 colonnes dans 2 tables différentes peuvent avoir le mêmemême
Objets manipulés par SQL
ColonnesColonnes
2 colonnes dans 2 tables différentes peuvent avoir le
mêmemême nomnom
table à laquelle elle appartient (obligatoire en cas
DEPT.dept,
SAGAR.DEPT.dept
SAGAR.DEPT.dept
14
SAGAR Samya
TypesTypes dede donnéesdonnées 15 SAGAR Samya
TypesTypes dede donnéesdonnées
15
SAGAR Samya
Types de données SQL2 TypesTypes numériquesnumériques Types pour les chaînes de caractères tellestelles queque
Types de données SQL2
TypesTypes numériquesnumériques
Types pour les chaînes de caractères
tellestelles queque lesles imagesimages etet lesles sonssons
type
16
SAGAR Samya
Types numérique (1) NombresNombres entiersentiers :: SMALLINT sur 2 octets INTEGER sur 4 octets À
Types numérique (1)
NombresNombres entiersentiers ::
SMALLINT sur 2 octets
INTEGER sur 4 octets
À virgule flottante :
REAL
DOUBLE PRECISION (ou(ou FLOAT ))
Constantes : 253.8, -10, 1.3E -5
17
SAGAR Samya
Types numériques (2) NombresNombres décimauxdécimaux àà nombrenombre fixefixe dede décimalesdécimales ::
Types numériques (2)
NombresNombres décimauxdécimaux àà nombrenombre fixefixe dede décimalesdécimales ::
DECIMAL(nbChiffres, nbDécimales)
NUMERIC(nbChiffres, nbDécimales)
Précision imposée
pour les calculs
NUMERIC(8, 2) ou DECIMAL(8, 2)
:
6 chiffres avant la virgule et 2 après
Constantes : 253.8, -10
18
SAGAR Samya
Types chaînes de caractères CHAR(CHAR( longueur)longueur) chaînes de caractères avec un nombre fixe de caractères
Types chaînes de caractères
CHAR(CHAR( longueur)longueur)
chaînes de caractères avec un nombre fixe de caractères
VARCHAR(longueurMaximum)
chaînes de caractères avec un nombre variable de caractères
(mais un nombre maximum de caractères)
CHAR(5)CHAR(5)
:: chaînechaîne dede 55 caractèrescaractères
VARCHAR(20)
: chaîne de 20 caractères au plus
Constante : 'Comptabilité', 'Aujourd''hui'
' doublé
19
SAGAR Samya
Types temporels DATEDATE pourpour lesles datesdates TIME pour les heures, minutes et secondes TIMESTAMP pour
Types temporels
DATEDATE pourpour lesles datesdates
TIME pour les heures, minutes et secondes
TIMESTAMP
pour un moment précis :
la microseconde (un millionième de seconde)
INTERVAL
permetpermet d'indiquerd'indiquer unun intervalleintervalle dede temps.temps.
20
SAGAR Samya
Type binaires CeCe typetype permetpermet d'enregistrerd'enregistrer desdes donnéesdonnées tellestelles queque
Type binaires
CeCe typetype permetpermet d'enregistrerd'enregistrer desdes donnéesdonnées tellestelles queque lesles
images et les sons, de très grande taille et avec divers
formats.
BIT
ExemplesExemples ::
BIT(1)
BIT(4)
Note :
Pas supporté par Oracle
Pas supporté par Oracle
21
SAGAR Samya
OracleOracle accepteaccepte lesles typestypes numériquesnumériques SQL2SQL2 maismais ilil lesles traduit dans ses
OracleOracle accepteaccepte lesles typestypes numériquesnumériques SQL2SQL2 maismais ilil lesles
traduit dans ses propres types
NUMBER
nombre à virgule flottante avec jusqu'à 38 chiffres significatifs
NUMBER(nbChiffres [, nb -décimales])
nombrenombre décimaldécimal d'aud'au plusplus
après la virgule
nbChiffresnbChiffres chiffreschiffres dontdont nbdécimalesnbdécimales
22
SAGAR Samya
CHAR , comme la norme SQL2 VARCHAR VARCHAR2VARCHAR2 est accepté mais Oracle conseille d'utiliser quiqui
CHAR , comme la norme SQL2
VARCHAR
VARCHAR2VARCHAR2
est accepté mais Oracle conseille d'utiliser
quiqui aa lesles mêmesmêmes propriétéspropriétés
Note : (la taille maximum est de 2000 caractères)
23
SAGAR Samya
LeLe typetype DATEDATE remplaceremplace lesles typestypes DATEDATE etet TIMETIME dede SQL2 DATE correspond à une
LeLe typetype DATEDATE remplaceremplace lesles typestypes
DATEDATE etet TIMETIME dede
SQL2
DATE correspond à une date avec une précision jusqu'à la
seconde
le format dépend de la
localisation de la base
Note : Ne pas oublier de donner 4 chiffres pour l'année,
sinon la date risque d'être mal interprétée par Oracle
24
SAGAR Samya
Interrogations et Mise à jour des données (LMD)(LMD) 25 SAGAR Samya
Interrogations et Mise à jour
des données
(LMD)(LMD)
25
SAGAR Samya
Remarque Voir cours Base de données ; semestre 1 _ 2INFO 26 SAGAR Samya
Remarque
Voir cours Base de données ; semestre 1 _ 2INFO
26
SAGAR Samya
27 SAGAR Samya
27
SAGAR Samya
SyntaxeSyntaxe simplfiéesimplfiée :: CREATE TABLE table colonne1 type1, colonne2 type2, ( . . . .
SyntaxeSyntaxe simplfiéesimplfiée ::
CREATE TABLE table
colonne1 type1,
colonne2 type2,
(
.
.
.
.
.
.)
Exemple :
create table article (
ref
nom
char(5) not null ,
varchar (20),
Option
Option not null
not null
prix numeric (9,2),
dateMAJ date);
si la colonne
doit obligatoirement
être renseignée
28
SAGAR Samya
Valeur par défaut On peut ajouter après la description d'une colonne l'option On peut ajouter
Valeur par défaut
On peut ajouter après la description d'une colonne l'option
On peut ajouter après la description d'une colonne l'option
NOT NULL qui interdira que cette colonne ne contienne pas
NOT NULL qui interdira que cette colonne ne contienne pas
la valeur NULL.
On peut donner une valeur par défaut 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 défaut ;
On peut aussi donner une fonction comme valeur par défaut ;
par exemple, default sysdate
par exemple,
29
SAGAR Samya
DESCRIBE CetteCette (pas(pas SQL)SQL) afficheaffiche SQL > describe article; Name Null ? Type REF Not
DESCRIBE
CetteCette
(pas(pas SQL)SQL) afficheaffiche
SQL > describe article;
Name
Null ?
Type
REF
Not null
CHAR(5)
NOMNOM
VARCHAR(20)VARCHAR(20)
PRIX
NUMBER(9,2)
DATEMAJ
DATE
Même si le type
donné à la
donné à la
création est
DECIMAL
30
SAGAR Samya
UneUne commandecommande estest annuléeannulée parpar lele SGBDSGBD sisi son exécution viole une des contraintes SAGAR
UneUne commandecommande estest annuléeannulée parpar lele SGBDSGBD sisi
son exécution viole une des contraintes
SAGAR Samya
31
LesLes contraintescontraintes possiblespossibles sontsont :: PRIMARY KEY : clé primaire : clé étrangère UNIQUE :
LesLes contraintescontraintes possiblespossibles sontsont ::
PRIMARY KEY
: clé primaire
: clé étrangère
UNIQUE : 2 lignes ne peuvent avoir la même valeur pour les colonnes
spécifiées
CHECK : contrainte de domaine, ou autre ; porte sur une seule ligne
22 typestypes dede contraintescontraintes ::
contrainte de colonne
concerne une seule colonne
elle suit la définition de la colonne dans un ordre CREATE TABLE
contrainte de table
concerne une ou plusieurs colonnes
concerne une ou plusieurs colonnes
elles se place au même niveau que les définition des colonnes dans un ordre
CREATE TABLE ou ALTER TABLE.
32
SAGAR Samya
Définition des contraintes CONSTRAINT nom -contrainte définition -contrainte CONSTRAINT nom -contrainte définition
Définition des contraintes
CONSTRAINT nom -contrainte définition -contrainte
CONSTRAINT nom -contrainte définition -contrainte
Les contraintes sont définies dans les commandes
CREATE (ou ALTER) TABLE
à l'intérieur des définitions de colonnes pour les contraintes
de colonne
de colonne
au même niveau que les définitions de colonnes pour les
contraintes de table
Chaque contrainte doit être
nommée :
Ceci permettra de la désigner par un ordre ALTER TABLE
Ceci permettra de la désigner 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 données.
33
SAGAR Samya
Clé primaire create table emp ( matr integer constraint pkemp primary key , . .
Clé primaire
create table emp (
matr integer constraint pkemp primary key ,
.
.
.
Sinon, il faut ajouter une contrainte de table :
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 clés primaires
Remarque : Contrainte sur les clés primaires
Aucune des colonnes de la clé primaire ne peut avoir la valeur
null
34
SAGAR Samya
Contrainte d'unicité : UNIQUE (pour une contrainte sur une table :) (pour une contrainte sur
Contrainte d'unicité : UNIQUE
(pour une contrainte sur une table :)
(pour une contrainte sur une table :)
UNIQUE (colonne1, colonne2,
)
(pour une contrainte sur une colonne :)
UNIQUE
Interdit qu'une colonne (ou la concaténation de plusieurs
colonnes) contienne deux valeurs identiques.
colonnes) contienne deux valeurs identiques.
Remarques :
2 lignes de la table ne pourront avoir la même 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 formée de
Attention: Erreur à ne pas faire
Si une table a une clé primaire formée de 2 colonnes, il ne
faut pas déclarer 2 contraintes de colonne
Mais , il faut déclarer une seule contrainte de table
portant sur les 2 colonnes :
constraint pkpar primary key(matr,
codeP)
36
SAGAR Samya
Clé étrangère SiSi uneune seuleseule colonnecolonne formeforme lala cléclé étrangère,étrangère, lele plusplus
Clé étrangère
SiSi uneune seuleseule colonnecolonne formeforme lala cléclé étrangère,étrangère, lele plusplus simplesimple estest
REFERENCES table -ref [(col1)]
create table emp (
. .
.,
dept integer constraint r_dept references
dept integer constraint r_dept references
dept (dept ))
Elle peut être une contrainte de table :
Optionnel si
colonne référencée
est clé primaire
REFERENCES table -
create table emp (
create table emp
(
Il faut ajouter
Il faut ajouter
. .
.,
foreign key
dept integer ,
constraint r_dept foreign key (dept )
references 37 dept (dept ))
SAGAR Samya
Clés étrangères : Remarques CetteCette contraintecontrainte nene permettrapermettra paspas
Clés étrangères : Remarques
CetteCette contraintecontrainte nene permettrapermettra paspas d'insérerd'insérer uneune ligneligne dede
la table si la table table -ref ne contient aucune ligne dont
la concaténation des valeurs de
col1, col2,
est égale à la
concaténation des valeurs de
colonne1, colonne2,
doiventdoivent avoiravoir lala contraintecontrainte ::
PRIMARY KEY ou UNIQUE
constraint r_dept references dept(dept)
dept doit être clé
dept doit être clé
primaire, ou
unique
38
SAGAR Samya
Clés étrangères : Options OptionOption ONON DELETEDELETE CASCADECASCADE Sans create table emp ( . dept
Clés étrangères : Options
OptionOption ONON DELETEDELETE CASCADECASCADE
Sans
create table emp (
.
dept integer
constraint r_dept references dept )
.
.
On ne peut supprimer un département s'il est référencé par
une ligne de la table
une ligne de la table
emp
emp
Avec
create table emp (
.
dept number (2)
constraint r_dept references dept
on delete cascade)
.
.
La suppression d'un département entraîne automatiquement la
La suppression d'un département entraîne automatiquement la
suppression de toutes les lignes de la table
emp qui
référencent ce
département
39
SAGAR Samya
Clés étrangères : Options OptionOption ONON DELETEDELETE SETSET NULLNULL Dans ce cas, la clé étrangère
Clés étrangères : Options
OptionOption ONON DELETEDELETE SETSET NULLNULL
Dans ce cas, la clé étrangère sera mise à NULL si la ligne
qu'elle référence dans
table -ref est supprimée.
Autres options : La norme SQL2 offre 4 autres options qui
nene sontsont paspas implémentéeimplémentée dansdans OracleOracle ::
ON DELETE SET DEFAULT met une valeur par défaut dans la clé
étrangère quand la clé primaire référencée est supprimée.
ON UPDATE CASCADE modifie la clé étrangère si on modifie la clé
primaire (ce qui est à éviter).
ON UPDATE SET NULL met NULL dans la clé étrangère quand la
clé primaire référencée est modifiée.
clé primaire référencée est modifiée.
ON UPDATE SET DEFAULT met une valeur par défaut dans la clé
étrangère quand la clé primaire référencée est modifiée.
40
SAGAR Samya
Contrainte CHECK CHECK(conditionCHECK(condition )) Donne une condition que les colonnes de chaque ligne devront
Contrainte CHECK
CHECK(conditionCHECK(condition ))
Donne une condition que les colonnes de chaque ligne
devront vérifier.
On peut ainsi indiquer des contraintes d'intégrité de
domaines.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.
sur la colonne en question.
41
SAGAR Samya
Exemples de contraintes CREATE TABLE EMP ( MATR INTEGER CONSTRAINT KEMP PRIMARY KEY , NOME
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 DesDes contraintescontraintes d'intégritéd'intégrité peuventpeuvent êtreêtre
Modification des contraintes
DesDes contraintescontraintes d'intégritéd'intégrité peuventpeuvent êtreêtre ajoutées,ajoutées,
supprimées ou renommées, par la commande
ALTER
TABLE .
On peut aussi modifier l' état de contraintes par
MODIFY
CONSTRAINT .
OnOn nene peutpeut ajouterajouter queque desdes contraintescontraintes dede table.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 nom_unique ADD CONSTRAINT sal_min CHECK(sal
Exemples de modification de contraintes
ALTER TABLE emp
DROP CONSTRAINT nom_unique
ADD CONSTRAINT sal_min CHECK(sal + coalesce( comm,0)>50)
RENAME CONSTRAINT
nom1 TO nom2
MODIFY CONSTRAINT sal_min DISABLE
44
SAGAR Samya
Vérification des contraintes EnEn fonctionnementfonctionnement normalnormal lesles contraintescontraintes sontsont
Vérification des contraintes
EnEn fonctionnementfonctionnement normalnormal lesles contraintescontraintes sontsont vérifiéesvérifiées àà
chaque requête SQL
Cette vérification peut être gênante, en particulier lors de
Exemple : si on a cette contrainte sur la colonne SUP de
lala tabletable EMPEMP ::
constraint sup_ref_emp references EMP
La contrainte oblige à ajouter les supérieurs en premier, avant
les employés.
Tout se passera bien si tous les employés sont ajoutés en une
Tout se passera bien si tous les employés sont ajoutés en une
seule transaction et si cette contrainte n'est vérifiée qu'à la fin
de la transaction.
45
SAGAR Samya
Contraintes « différables » contrainte peut être différée transaction. à la fin de la SiSi
Contraintes « différables »
contrainte peut être différée
transaction.
à la fin de la
SiSi uneune contraintecontrainte estest différéedifférée etet sisi elleelle n'estn'est paspas
vérifiée au moment du commit de la transaction,
toute la transaction est invalidée (rollback)
automatiquement par le SGBD.
46
SAGAR Samya
Différer une contrainte 22 étapesétapes :: 1. Contrainte différale : Au moment de la déclaration
Différer une contrainte
22 étapesétapes ::
1. Contrainte différale : Au moment de la déclaration de la
contrainte, on indique qu'on pourra différer sa vérification
:
CONSTRAINT truc def-contrainte [NOT] DEFERRABLE
[INITIALLY DEFERRED | IMMEDIATE]
La valeur par défaut est
NOT DEFERRABLE.
Si une contrainte peut être différée, elle ne le sera qu'après la
deuxièmedeuxième étape.étape. OnOn peutpeut changerchanger çaça enen donnantdonnant lala clauseclause
INITIALLY DEFERRED
qui diffère tout de suite la
contrainte pour toutes les transactions.
47
SAGAR Samya
Différer une contrainte 22 OnOn diffèrediffère lala vérificationvérification dede contraintescontraintes justejuste
Différer une contrainte
22 OnOn diffèrediffère lala vérificationvérification dede contraintescontraintes justejuste pourpour lala
transaction en cours, avec la commande :
set CONSTRAINTS {liste de contraintes | ALL} DEFERRED
Si elle est INITIALLY DEFERRED, elle sera différée par défaut
au début de chaque transaction. On peut ne plus la différer
au début de chaque transaction. On peut ne plus la différer
pour le temps d'une transaction en lançant la commande :
set CONSTRAINTS {liste de contraintes | ALL} IMMEDIATE
48
SAGAR Samya
Différer une contrainte : Exemple createcreate tabletable empemp (( matr integer constraint emp_pk primary key,
Différer une contrainte : Exemple
createcreate tabletable empemp ((
matr integer constraint emp_pk primary key,
. .
.,
sup integer CONSTRAINT EMP_REF_SUP REFERENCES EMP DEFERRABLE ,
. .
.);
SET CONSTRAINTS EMP_REF_SUP DEFERRED ;
insertinsert intointo empemp valuesvalues
(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
Différer une contrainte OnOn peutpeut modifiermodifier l'étatl'état commande ALTER TABLE d'uned'une
Différer une contrainte
OnOn peutpeut modifiermodifier l'étatl'état
commande ALTER TABLE
d'uned'une contraintecontrainte différabledifférable
parpar lala
Exemple :
ALTER TABLE emp
MODIFY CONSTRAINT ref_dept_emp INITIALLY DEFERRED
MODIFY CONSTRAINT ref_dept_emp INITIALLY DEFERRED
Si on veut rendre une contrainte différable (ou l'inverse),
on doit supprimer la contrainte et la recréer ensuite.
50
SAGAR Samya
Invalider des contraintes avec Oracle OracleOracle Utile pour, par exemple, améliorer les performances lors ALTER
Invalider des contraintes avec Oracle
OracleOracle
Utile pour, par exemple, améliorer 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
une table les lignes qui ne respectent pas la contrainte
réactivée.
51
SAGAR Samya
Création et descriptions 52 SAGAR Samya
Création et descriptions
52
SAGAR Samya
Schéma CREATE SCHEMA AUTHORIZATION CREATE SCHEMA AUTHORIZATION Un schéma est un ensemble d'objets (tables, vues,
Schéma
CREATE SCHEMA AUTHORIZATION
CREATE SCHEMA AUTHORIZATION
Un schéma
est un ensemble d'objets (tables, vues, index, autorisations,
etc
)
gérés ensemble.
On pourra ainsi avoir un schéma lié à la gestion du personnel et un autre
lié à la gestion des clients.
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 schéma avec
un nom d'utilisateur.
Le catalogue , est un ensemble de schémas.
Un catalogue doit nécessairement comprendre un schéma particulier qui
correspondcorrespond auau dictionnairedictionnaire desdes donnéesdonnées
53
SAGAR Samya
CREATE TABLE table CREATE TABLE table permet d'insérer pendant la création de la table des
CREATE TABLE table
CREATE TABLE table
permet d'insérer pendant la création de la table des lignes venant d'autres
tables.
On peut aussi spécifier des contraintes d'intégrité de colonne ou de table.
Il faut évidemment que les définitions des colonnes de la table créée et du
Il faut évidemment que les définitions des colonnes de la table créée et du
résultat de la sélection soient compatibles en type et en taille.
résultat de la sélection soient compatibles en type et en taille.
On peut également ne pas donner les noms et type des colonnes de la
table créée.
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 définition d'une tableALTER AjoutAjout d'uned'une colonnecolonne -- ADDADD ALTER TABLE table
Modifier la définition d'une tableALTER
AjoutAjout d'uned'une colonnecolonne -- ADDADD
ALTER TABLE table
ADD (col 1 type1, col 2 type2
Exemple :
Exemple :
alter table personne
add (email_valide char(1)
constraint personne_email_valide
check( email_valide in ('o', 'n')));
55
SAGAR Samya
Modifier la définition d'une tableALTER ModificationModification d'uned'une colonnecolonne MODIFYMODIFY
Modifier la définition d'une tableALTER
ModificationModification d'uned'une colonnecolonne
MODIFYMODIFY
ALTER TABLE table
Note : On ne peut modifier une colonne que si la colonne ne contient
que des valeurs
que des valeurs
null ou si la nouvelle définition est compatible avec les
null ou si la nouvelle définition est compatible avec les
valeurs déjà entrées dans cette colonne
on ne peut pas diminuer la taille maximale d'une colonne.
on ne peut spécifier 'NOT NULL' que si la colonne ne contient pas de valeur
nulle.
Il est toujours possible d'augmenter la taille maximale d'une colonne.
OnOn peutpeut donnerdonner uneune contraintecontrainte dede colonnecolonne dansdans lala nouvellenouvelle définitiondéfinition dede lala
colonne.
et on peut dans tous les cas spécier 'NULL' pour autoriser les valeurs nulles.
56
SAGAR Samya
Modifier la définition d'une tableALTER ModificationModification d'uned'une colonnecolonne MODIFYMODIFY
Modifier la définition d'une tableALTER
ModificationModification d'uned'une colonnecolonne
MODIFYMODIFY
Exemples
alter table personne
modify (
prenoms null,
nomnom varcharvarchar (50));(50));
alter table personne
modify (
sexe char(1)
constraint personne_sexe_ck check(sexe
in ('m', 'f')));
57
SAGAR Samya
Modifier la définition d'une tableALTER SuppressionSuppression d'uned'une colonnecolonne -- DROPDROP
Modifier la définition d'une tableALTER
SuppressionSuppression d'uned'une colonnecolonne
-- DROPDROP COLUMNCOLUMN
ALTER TABLE table
DROP COLUMN colonne;
Important
Important
référencée par une clé étrangère
sur laquelle un index a été construit
Exemple :
ALTER TABLE EMP
ALTER TABLE EMP
DROP COLUMN sal;
58
SAGAR Samya
Modifier la définition d'une tableALTER RenommerRenommer uneune colonnecolonne RENAMERENAME COLUMNCOLUMN ALTER
Modifier la définition d'une tableALTER
RenommerRenommer uneune colonnecolonne
RENAMERENAME COLUMNCOLUMN
ALTER TABLE table
RENAME COLUMN ancien_nom TO nouveau_nom ;
59
SAGAR Samya
Modifier la définition d'une tableALTER RenommerRenommer uneune tabletable RENAMERENAME TOTO On peut renommer une
Modifier la définition d'une tableALTER
RenommerRenommer uneune tabletable
RENAMERENAME TOTO
On peut renommer une table :
ALTER TABLE ancienNom
RENAME TO nouveauNom
Oracle offre une commande équivalente pour renommer
une table
RENAME ancienNom TO nouveauNom
60
SAGAR Samya
Supprimer une table DROP TABLE table DROP TABLE table permet de supprimer une table :
Supprimer une table
DROP TABLE table
DROP TABLE table
permet de supprimer une table :
les lignes de la table et la définition elle
détruites.
-même de la table sont
L'espace occupé par la table est libéré.
L'espace occupé par la table est libéré.
Il est impossible de supprimer une table si la table est
référencée par une contrainte d'intégrité référentielle.
Une variante Oracle (pas SQL2 ) de la commande permet de
supprimersupprimer lesles contraintescontraintes d'intégritéd'intégrité etet lala tabletable ::
DROP TABLE table CASCADE CONSTRAINTS
61
SAGAR Samya
Si une table doit être utilisée par plusieurs utilisateurs, il peut Si une table doit
Si une table doit être utilisée par plusieurs utilisateurs, il peut
Si une table doit être utilisée par plusieurs utilisateurs, il peut
être intéressant de lui donner un
être intéressant de lui donner un
synonyme public
synonyme public
pour que
pour que
les utilisateurs ne soient pas obligés de préfixer le nom de la
table par le nom de son créateur.
CREATE [ PUBLIC | PRIVATE ] SYNONYM
employe FOR
toto.emp
toto.emp
Pour chercher des synonymes dans le dictionnaire des
données :
select synonym_name , table_name , owner
from all_synonyms
where table_owner
where table_owner
Remarque : on peut créer un synonyme à une vue.
62
SAGAR Samya
Vue UneUne vuevue estest uneune visionvision partiellepartielle ouou particulièreparticulière desdes select : les
Vue
UneUne vuevue estest uneune visionvision partiellepartielle ouou particulièreparticulière desdes
select :
les données de la vue sont celles retournées par le select
Les utilisateurs peuvent consulter ou modifier la base à
traverstravers lala vuevue commecomme sisi c'étaitc'était uneune tabletable réelleréelle
Seule la définition de la vue est enregistrée dans la base,
et pas les données de la vue.
table virtuelle .
63
SAGAR Samya
Création et suppression d'une vue CREATE VIEW CREATE VIEW [WITH CHECK OPTION] Le select peut
Création et suppression d'une vue
CREATE VIEW
CREATE VIEW
[WITH CHECK OPTION]
Le select peut contenir toutes les clauses d'un select sauf « order by »
La spécification des noms des colonnes de la vue est facultative : par
défaut, sont ceux des colonnes résultats du SELECT.
Si certaines colonnes résultats du SELECT sont des expressions sans
Si certaines colonnes résultats du SELECT sont des expressions sans
nom, il faut alors obligatoirement spécifier 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 création de vues create view deptStat (nom, inf, moy, max, total) as select
Exemple de création de vues
create view deptStat (nom, inf, moy, max, total)
as
select nomd, min(sal), avg(sal), max(sal), sum(sal)
fromfrom empemp naturalnatural joinjoin deptdept
group by dept.nomd
65
SAGAR Samya
Utilisation des vues dans un select DansDans unun selectselect onon peutpeut utiliserutiliser uneune vuevue àà
Utilisation des vues dans un select
DansDans unun selectselect onon peutpeut utiliserutiliser uneune vuevue àà lala placeplace d'uned'une
table
select * from emp10 ;
selectselect nom,nom, totaltotal
from deptStat
where total > 100000;
66
SAGAR Samya
Suppression avec une vue OnOn peutpeut effectuereffectuer desdes deletedelete àà traverstravers uneune vue,vue,
Suppression avec une vue
OnOn peutpeut effectuereffectuer desdes
deletedelete àà traverstravers uneune vue,vue, soussous
les conditions suivantes sur le select qui définit la vue :
une seule table (pas de jointure)
pas de group by
pas de distinct
paspas dede fonctionfonction dede groupegroupe
67
SAGAR Samya
Modification avec une vue OnOn peutpeut effectuereffectuer desdes updateupdate àà traverstravers uneune vue,vue,
Modification avec une vue
OnOn peutpeut effectuereffectuer desdes
updateupdate àà traverstravers uneune vue,vue, soussous
les conditions du delete , et en plus :
les colonnes modifiées sont des colonnes réelles de la table
(pas des expressions)
ExempleExemple ::
update emp10
set sal = sal * 1.1;
Ainsi, il est possible de modifier les salaires du département 10
à à
travers la vue EMP10. Toutes les lignes de la table EMP avec
travers la vue EMP10. Toutes les lignes de la table EMP avec
DEPT = 10 seront modifiées.
68
SAGAR Samya
Insertion avec une vue OnOn peutpeut effectuereffectuer desdes insertinsert àà traverstravers uneune vue,vue, soussous
Insertion avec une vue
OnOn peutpeut effectuereffectuer desdes
insertinsert àà traverstravers uneune vue,vue, soussous
les conditions du update , et en plus :
toute colonne « not null » de la table représentée par la vue
est présente dans la vue
ExempleExemple
insert into emp10 ( matr, nome
69
SAGAR Samya
Les Vues et Oracle LesLes restrictionsrestrictions donnéesdonnées cici --dessusdessus (( suppression,suppression,
Les Vues et Oracle
LesLes restrictionsrestrictions donnéesdonnées cici --dessusdessus (( suppression,suppression, modification,modification,
insertion avec une vue ) sont les restrictions de la normeSQL2.
Oracle permet de modifier les données d'une table sous
-
jacente par l'intermédiaire d'une vue qui comporte une
jointure lorsque la vue
préserve la clé
de la table.
Exemple: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 UneUne vuevue peutpeut créercréer desdes donnéesdonnées qu'ellequ'elle nene pourrapourra paspas
Option CHECK
UneUne vuevue peutpeut créercréer desdes donnéesdonnées qu'ellequ'elle nene pourrapourra paspas
visualiser.
On peut ainsi ajouter un employé du département 20 avec la vue
EMP10.
Si la vue a été créée avec "
WITH CHECK OPTION ", toute
modificationmodification àà traverstravers dede lala vuevue nene peutpeut donnerdonner desdes donnéesdonnées
qui ne seraient pas affichées par la vue
Exemple :
create view emp10 AS
select * from emp
where dept = 10
with check option
update emp10
interdit
set dept =
20
71
SAGAR Samya
Utilité des vues LesLes vuesvues permettentpermettent dede dissocierdissocier la façon dont les utilisateurs voient
Utilité des vues
LesLes vuesvues permettentpermettent dede dissocierdissocier
la façon dont les utilisateurs voient les données
du découpage en tables
On favorise ainsi l'indépendance entre les programmes et
les données
SiSi unun programmeprogramme utiliseutilise desdes vues,vues, onon peut,peut, parpar exemple,exemple,
remplacer une table par
2 tables sans modifier le
programme de consultation des données ; il suffit de
modifier la définition des vues
72
SAGAR Samya
Utilité des vues PeuventPeuvent simplifiersimplifier lala consultationconsultation dede lala basebase enen enregistrant
Utilité des vues
PeuventPeuvent simplifiersimplifier lala consultationconsultation dede lala basebase enen
enregistrant des select complexes
Participent à la protection des données :
on peut donner accès à une vue, sans donner accès à la table
sous -jacente
lignes d'une table
les modifications des données peuvent être restreintes avec la
clause WITH CHECK OPTION
73
SAGAR Samya
Index Un index utilise des techniques informatiques pour rendrerendre trèstrès rapidesrapides lesles accèsaccès
Index
Un index utilise des techniques informatiques pour
rendrerendre trèstrès rapidesrapides lesles accèsaccès
auxaux valeursvaleurs d'uned'une colonnecolonne
Exemple :
select * from emp
where nomE
est très long si la table
est très long si la table
emp contient des millions
emp contient des millions
de lignes
de lignes
Un index bien construit permet d'obtenir l'emplacement des
informations sur
Mahmoud
en quelques accès disques.
Un index peut porter sur plusieurs colonnes : la clé
d'accèsd'accès serasera lala concaténationconcaténation desdes différentesdifférentes colonnes.colonnes.
On peut créer plusieurs index indépendants sur une
même table.
74
SAGAR Samya
Création et suppression d'un index CREATE [UNIQUE] INDEX nomIndex ON table (col 1, col 2
Création et suppression d'un index
CREATE [UNIQUE] INDEX nomIndex
ON table (col 1, col 2
Exemple :
create index nomE on emp(nomE);
Le nom choisi doit être
Le nom choisi doit être
unique
unique
parmi tous les index de
parmi tous les index de
toutes les tables
Oracle
crée automatiquement un index sur les colonnes
qui ont des contraintes
Primary key
et Unique
SuppressionSuppression ::
DROP INDEX nomIndex
75
SAGAR Samya
Utilisation d'un index AprèsAprès sasa créationcréation unun indexindex estest gérégéré
Utilisation d'un index
AprèsAprès sasa créationcréation unun indexindex estest gérégéré automatiquementautomatiquement parpar
le SGBD
Il est transparent pour l'utilisateur : celui
-ci interroge la
base de la même façon que si l'index n'existait pas
Le SGBD peut utiliser un index s'il pense que la requête
serasera accéléréeaccélérée
Les index ralentissent les modifications des données
76
SAGAR Samya
Séquences et Génération de clés primaire Utilité Les identifiants de lignes non significatifs sont préférables
Séquences et Génération de clés primaire
Utilité
Les identifiants de lignes non significatifs sont préférables
entiers
Le problème : générer des entiers sans que
2 lignes puissent
avoiravoir lele mêmemême identifiant,identifiant, mêmemême enen situationsituation dede concurrenceconcurrence
entre plusieurs transactions
Solution
1 (Une mauvaise solution)
Prendre le plus grand nombre déjà utilisé dans la table comme
identifiant et ajouter
1:
lock table;
Exemple :
Exemple :
val = select max(cle) from table;
val = select max(cle) from table;
insert into table
commit;
77
SAGAR Samya
Séquences et Génération de clés primaire InconvénientsInconvénients dede lala solutionsolution 11 nécessite un
Séquences et Génération de clés primaire
InconvénientsInconvénients dede lala solutionsolution 11
nécessite un accès à la base
il faut trouver le plus grand
nécessite un blocage de la table pour éviter que 2 transactions
Si on veut garder un historique, on peut se retrouver avec
78
SAGAR Samya
Séquences et Génération de clés primaire SolutionSolution 22 Une table contient la prochaine clé à
Séquences et Génération de clés primaire
SolutionSolution 22
Une table contient la prochaine clé à attribuer
La valeur est incrémentée à chaque nouvelle clé
Variantes
VarianteVariante 11 ::
Une seule table contient une seule valeur utilisée pour les identifiants
de toutes les tables
Variante 2 :
Une table par clé
VarianteVariante 33 ::
Quelle colonnes dans la table des clés ?
79
SAGAR Samya
Séquences et Génération de clés primaire ExempleExemple lock table_cle; update table_cle setset clecle == clecle
Séquences et Génération de clés primaire
ExempleExemple
lock table_cle;
update table_cle
setset clecle == clecle ++ 11;;
val = select cle from table_cle;
commit;
insert into table
commit;
80
SAGAR Samya
Séquences et Génération de clés primaire InconvénientsInconvénients dede l'utilisationl'utilisation
Séquences et Génération de clés primaire
InconvénientsInconvénients dede l'utilisationl'utilisation d'uned'une tabletable
nécessite un accès à la base (mais cette petite table est
conservée en mémoire centrale dans le cache du SGBD)
81
SAGAR Samya
Séquences et Génération de clés primaire SéquenceSéquence Les versions actuelles des SGBD offrent des solutions
Séquences et Génération de clés primaire
SéquenceSéquence
Les versions actuelles des SGBD offrent des solutions qui
Inconvénient : pas les mêmes solutions dans tous les
SGBDsSGBDs
Les séquences sont disponibles avec
Oracle , DB2 et
PostgreSQL
82
SAGAR Samya
Créer une séquence CREATE SEQUENCE nom_séquence [INCREMENT BY entier1] [START WITH entier2] Exemple Exemple
Créer une séquence
CREATE SEQUENCE nom_séquence
[INCREMENT BY entier1]
[START WITH entier2]
Exemple
Exemple
create sequence seqdept
increment by 10
start with 10
83
SAGAR Samya
Utilisation des séquences DeuxDeux pseudopseudo --colonnescolonnes permettentpermettent d'utiliserd'utiliser
Utilisation des séquences
DeuxDeux pseudopseudo --colonnescolonnes permettentpermettent d'utiliserd'utiliser lesles séquencesséquences ::
CURRVAL retourne la valeur courante
NEXTVAL incrémente la séquence et retourne la nouvelle valeur
insert into dept(dept, nomd )
values ( seqdept.nextval , 'Finances')
Remarques :
Remarques :
On ne peut utiliser
CURRVAL
NEXTVAL au moins
une fois dans la session de travail
NEXTVAL modifie immédiatement la valeur future pour les autres
LaLa valeurvaleur dede CURRVALCURRVAL nene dépenddépend queque desdes
transaction
NEXTVALNEXTVAL lancéslancés dansdans lala mêmemême
84
SAGAR Samya
Modification des séquences ALTER SEQUENCE nom_séquence ALTER SEQUENCE nom_séquence INCREMENT BY entier 1 Exemple :
Modification des séquences
ALTER SEQUENCE nom_séquence
ALTER SEQUENCE nom_séquence
INCREMENT BY entier 1
Exemple :
alter sequence seqdept
increment by 5
increment by 5
Remarque : On ne peut modifier la valeur de départ
Informations sur les séquences
select seqdept.currval from dual
Tables du dictionnaire des données :
USER_SEQUENCESet ALL_SEQUENCES
85
SAGAR Samya
Récupérer plusieurs identificateurs MettreMettre unun incrémentincrément supérieursupérieur àà 11 permetpermet
Récupérer plusieurs identificateurs
MettreMettre unun incrémentincrément supérieursupérieur àà 11 permetpermet d'obtenird'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 même
tempstemps
Remarque :
DB2DB2 etet SQLSQL ServerServer ontont uneune clauseclause ««
IDENTITYIDENTITY »»
86
SAGAR Samya
Conclusion Les procédures stockées, les fonctions, ou encore les triggers (voir cours PL/SQL). Cluster (voir
Conclusion
Les procédures stockées, les fonctions, ou encore les triggers
(voir cours PL/SQL).
Cluster (voir cour SGBD)
LesLes indexindex etet lesles vuesvues sontsont fortementfortement utilisésutilisés auau niveauniveau dede
la performance de base de données et aux plans
87
SAGAR Samya