Académique Documents
Professionnel Documents
Culture Documents
Tous les SGBD relationnels utilisent le langage SQL pour accder la base de donnes et la manipuler : - crer, supprimer, modifier des tables - insrer, supprimer, mettre our les donnes des tables !m" : c#a"ue SGBD utilise des e$tensions du langage "ui lui sont propres%
Quel"ues a&antages : - !e"u'tes simples dclarati&es (Q)*+, non ,*--./T0 - primiti&es crites en SQL 12 normalises, donc portables d3un SGBD un autre (si seule la norme est utilise0
27/08/2013
Le SGBD PostgresSQL
Documentation, par exemple : ttp:!!docs"postgres#l$r"org!%"&!
PostgresSQL est un SGBD Relationnel (les dernires versions possdent des fonctionnalits SGBD-Relationnel-Objet) PostgreSQL a une architecture Client/Serveur bas sur le modle : un processus par client PostgreSQL possde un dictionnaire de donnes o sont dcrites : - les tables, les colonnes, les index, les contraintes, - les types de donnes, les fonctions, les oprateurs, Les tables du dictionnaire commencent par pg_. Pour obtenir la liste complte des tables, voir le site : http://docs.postgresqlfr.org/8.0/catalogs.html
SQL (Structured Quer4 Langage0 : standards (SQL9:, SQL:;, SQL::0 (ou SQL<, SQL;, SQL=0 --2 traitement complet d 5une BD relationnelle --2 interactif ou par programmation --2 regroupe = langages : > DDL (Data Description Langage0 ou LDD : ? description des ob ets de la base (tables, 0 ,!.@T., @LT.!, D!*A > D'L (-anipulation0 ou L-D : ? +nterrogation : S.L.,T ? -anipulation : +/S.!T, )AD@T., D.L.T. > D(L (,ontrol0 ou L,D : contrBle d 5acc6s au$ donnes : G!@/T C !.D*E. > F ; instructions : ,*--+T (&alider0 et !*LLB@,E (dfaire0
5
*n utilise comme e$emple une BD! contenant ; tables .-A et D.AT et une table D)@L d3un seul attribut% .lle est &ide% )'P (empno, ename, *o+, mgr, iredate, sal, comm, deptno)
? ? empno, mgr, deptno : entier , ename, *o+ : c a-ne de caract.re / iredate : date sal, comm : real
@nal4se s4nta$i"ue : &rification de la disposition des mots dans la re"u'te (mots-cl et autres0
? *ptimisation : le SGBD gn6re des re"u'tes optimises partir de la re"u'te de base% +l se sert pour cela de la connaissance de la structure des donnes, des inde$ (s 5ils e$istent0 et l 5organisation p#4si"ue des donnes, et de statisti"ues d 5acc6s au$ donnes%
? .$cution : le SGBD gn6re des plans d 5e$cutions% +l en c#oit un et e$cute la re"u'te selon ce plan% ? 7ote : le SGBD tient compte du fait "ue d 5autres utilisateurs peu&ent 'tre en train d 5accder au$ m'mes donnes au m'me moment 12 mcanisme de contrBleur de concurrence%
Les t4pes de donnes Les t4pes numri"ues : integer, smallint, double, float,%%% e$emple : ;=, -<;;, =%G, -H%I,% % % Les t4pes alp#anumri"ues : c#ar, &arc#ar(n0, c#ar(n0, te$t e$emples : 5&5, 5la classe 5, 3T*T*3, %%% Le t4pe date (format modifiable0 e$emple : 5;JJ;-J;-;95 Le t4pe boolean : bool e$emples :5f5, 5t5 .t d5autres encore% % %
Type date : Le type DATE Oracle contient une date prcise la seconde prs. Le type DATE postgreSQL contient une date prcise au jour prs. Type date Oracle ~ Type TIMESTAMP de postgreSQL. Oprations autoriss sur les dates : soustraire ou d'ajouter des jours une date Ex: PostgreSQL : SELECT date '29-nov-2008' + 1; -> 2008-11-30 Pour soustraire ou ajouter des intervalles de temps un attribut de type TIMESTAMP, il faut utiliser une valeur de type INTERVAL. ex: SELECT timestamp '29-nov-2008' + interval '1 day'; -> 2008-11-30 00:00:00 Current_date (PostegreSQL) sysdate (Oracle)
12
S)L)(0
- .st une commande "ui poss6de beaucoup d 5options (une centaine0 - Aermet d 5e$traire des informations partir d 5une ou plusieurs tables "ui respectent &entuellement certaines conditions .$emple S.L.,T empno K!*- emp L#ere deptno 1 <JM 12 Utiliser la table EMP pour extraire les noms des employs qui travaillent dans le dpartement numro 10.
27/08/2013
S4nta$e gnrale
S.L.,T nomNc O, nomNc O, nomNcP P Q > K!*- tab< O, tab; O, tabiP P RS.!. conditions *!D.! BT crit6res de tri G!*)A BT colonne de regroupement
27/08/2013
*
toutes les colonnes
from
mot-cl
nom_table ;
nom de la table
)8: <% e$traire toutes les infos sur les dpartements : Select ;% .$traire les +nfos sur les emplo4s : select > from empM
!rom deptM
)8: <% Lister les noms des dpartements : Select dname !rom dept" ;% Lister les noms et salaires des emplo4s : select ename# sal !rom emp"
15
Select dname AS NOM D !A"# M N#$ %rom dept& '( le nom est compos )* mettre entre +,illemets-('
2. Lister les noms et salaires des emplo.s :
16
Extraction de toutes les lignes d une table liminer les doublons ventuels : DISTINCT
>
from nomNtable M
EX: Lister les di%%rents mtiers 12o3s4 sans do,3lons : ? Select distinct 2o3 %rom emp&
17
16
<prateurs +oolens
5 = oprateurs boolens : /*T, @/D et *! *n peut les combiner dans une e$pression% *n a : Ariorit(/*T0 2 Ariorit(@/D0 2 Ariorit(*!0, sauf parent#sage%
27
<prateurs +oolens
Slection de lignes dont la 3aleur d 5une colonne est comprise dans une suite de 3aleurs:
Select Krom % R#ere nomNcol O/*TP +/ (&al<, &al;, , &alNn0M .W : <% Les emplo4s dont le c#ef a pour numro soit I:J;, soit I9=: : Select !rom emp $%ere m7r 8/ 9:;0<# :=(;>" ;% Les emplo4s "ui ne sont ni du dpartement ;J, ni du dpartement =J : Select !rom emp $%ere deptno /31 8/ 9<0# (0>"
21
<prateurs +oolens
Slection de lignes dont la 3aleur d 5une colonne est comprise entre deux 3aleurs: S4nta$e : Select > from emp L#ere nomNcol O/*TP B.TR../ &al< and &al;M .W% Les emplo4s dont le salaire est compris entre <ZJJ et ;ZJJ : Select !rom emp $%ere sal bet$een 1?00 and <?00" @ bornes incluses @
22
nomNcol O@S,QD.S,P
28
<prateurs arit mti#ues .mplo4s dont le salaire est U <ZJJ, tris par ordre alp#abti"ue croissant : Select !rom emp $%ere sal B 1?00 34*E4 C0 ename" @ 3rdre croissant par d!aut @ /ote :SQL, AostgreSQL : il est possible d 5effectuer des tris sans mentionner les noms de colonnes mais leurs positions relati&es dans le S.L.,T : Liste des emplo4s tris par numros d 5emplo4 croissant (empno0, et sur le numro du c#ef (mgr0 dcroissant : Select empno, ename, ob, mgr from emp *!D.! BT <, G D.S,M
29
La =ointure
@ssociation de lignes de plusieurs tables en fonction d 5un crit6re (de ointure0%
Select > ?rom nom@ta+ Anom@alias; B ere Ccrit.re de *ointureDE
.W% @ffic#er les noms des emplo4s (table emp0 a&ec les noms de leur dpartement (table dept0 : Select ename# dname !rom emp# dept $%ere emp.deptno & dept.deptno M !m" : <% le nom de colonne tant identi"ue 12 on le prfi$e par le nom de la table% F" 2uto,*ointure (*ointure de lignes di$$rentes de la m6me ta+le)
25
La =ointure
Lister les emplo4s a&ec leur manager : le crit6re d 5auto- ointure est ralis en associant .-A/* et -G! ("ui est aussi un numro d 5emplo4, c--d du c#ef0: Aour effectuer l 5auto- ointure, il con&ient de citer ; fois la m'me table en utilisant un alias, car on traite ; tables identi"ues, les m'mes noms de colonnes apparaissent dans les deu$ tables% Select emp.empno, emp.ename, empbis.empno, empbis.ename From emp, emp empbis Where emp.mgr = empbis.empno;
26
Jointure externe Pour effectuer une jointure externe entre table, il faut utiliser la syntaxe conforme au standard SQL (disponible aussi Oracle), LEFT OUTER JOIN et RIGHT OUTER JOIN: Ex : SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.id=table2.id; Tous les n-uplets de table1 apparatront dans l'ensemble des n-uplets rsultats. Les n-uplets de table1 pour lesquelles il n'est pas possible de faire une jointure avec des n-uplets de la table2 auront NULL comme valeur pour les attributs de table2.
SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.id=table2.id; Tous les n-uplets de table2 apparatront dans l'ensemble des n-uplets rsultats. Les n-uplets de table2 pour lesquelles il n'est pas possible de faire une jointure avec des n-uplets de la table1 auront NULL comme valeur pour les attributs de table1.
5 Sous,interrogation
5 Select Krom R#ere nomNcol Uoprateur2 (Select Krom R#ere0M .W: @ffic#er les emplo4s "ui sont dans le m'me dpartement "ue 3@LL./3 : d3abord rec#erc#e du dpartement de @LL./, puis connaissant son numro (=J0, on c#erc#e les emplo4s "ui 4 tra&aillent% Select Drom emp E%ere deptno & 9Select deptno !rom emp $%ere ename & )+,,E/->"
26
Sous,interrogation
Sous,interrogation rapportant plusieurs lignes : I7, 27G, 2LL Le rsultat d 5une sous-interrogation peut comporter plusieurs lignes% Dans ce cas les oprateurs 1, U, 2 ne con&iennent plus% L 5galit sera traite par l 5oprateur +/ (un Y1Y par rapport une suite de &aleurs0, et Les ingalits seront traites par l 5oprateur @/T et @LL% .$emple : Les emplo4s tra&aillant dans le m'me dpartement "ue l 5un des emplo4s dpendant du prsident% Select !rom emp E%ere deptno in 9select deptno !rom emp E%ere m7r & 9Select empno !rom emp E%ere .ob&) P4ES8*E/1 -> >"
87
Oprateur ANY : Le rsultat de la comparaison est VRAI, s il l est pour au moins un lment de l ensemble (de la sous-interrogation) EX: Afficher les employs ayant un salaire suprieur celui de l un des employs travaillant dans le dpartement 10 Select * from emp where sal > ANY (select sal from emp where deptno=10);
81
Oprateur ALL : Le rsultat de la comparaison est VRAI, s il l est pour tous les lments de l ensemble (sous-interrogation) EX: Afficher les employs ayant un salaire suprieur celui des employs travaillant dans le dpartement 20. Select * From emp where sal > ALL (select sal from emp where deptno=20);
82
)xtraction de lignes si le rsultat de la sous,interrogation comporte au moins une ligne A7<0; )8IS0
Select Krom % R#ere O/*TP .W+STS (Select Krom R#ere 0M )xH: lister les emplo4s s 5il 4 en un parmi eu$ "ui a une commission 2 <JJJM Select !rom emp $%ere EF8S1S 9select !rom emp $%ere comm ' 1000>"
)xF : lister les emplo4s s 5il n 54 a aucun parmi eu$ "ui a une commission 2 <JJJ Select !rom emp $%ere /31 EF8S1S 9select !rom emp $%ere comm ' 1000>"
88
R#ere conditionM 12 Le rsultat sera affic# sur une seule ligne% .$: <% @ffic#er le total des salaires : Select sum9sal> !rom emp" ;% @ffic#er le total et la mo4enne des commissions : Select sum9comm># av79comm> !rom emp"
89
85
Regroupement du rsultat d une slection GROUP BY Les lignes provenant d une slection peuvent tre regroupes en fonction d une valeur commune dans une ou plusieurs colonnes : Select [AVG| |COUNT] ([distint|all] from nom_table where <condition> GROUP BY [nom_col1 | nom_col2| .]; Rmq: Il n est pas ncessaire de raliser un tri avant le regroupement. Il est effectu automatiquement par GROUP BY. Ex: Calculer le total des salaires par dpartement : Select deptno, sum(sal) from emp group by deptno;
86
Sous,interrogation de groupe
Select . From nom_tab [alias] Where nom_col <operate r! "select #rom $here % Ex& '##icher les emplo()s a(ant le pl s *ran+ salaire par +)partement & Select ename, sal, deptno, from emp e1 Where sal = (Select max(sal) from emp where e1.deptno= emp.deptno); Rmq & po r le,er ambi* -t) s r le nom +e colonne "appartenant soit . l /interro*ation pple0 soit . la so s1interro*%0 on tilise n alias.
87
(ration d 5une ta+le 4 partir d 5une autre ta+le (<racle) ,!.@T. T@BL. nomNtab @S S.L.,T % K!*- % RS.!. %%M , *u bien ,!.@T. T@BL. nomNtab ( nomNcol /*T /)LL 0 @S S.L.,T %M
.$: ,reate table dept=J (name, #date, manager0 @S S.L.,T ename, #iredate, mgr Krom emp R#ere deptno 1 =JM !m" : Si aucune colonne n5est spcifie, les noms de colonnes sont ceu$ de la table d 5origine% - Si des colonnes sont spcifies, leur nombre doit 'tre le m'me "ue celui de l 5interrogation (apr6s @S S.L.,T 0 - Les t4pes des colonnes sont ceu$ des colonnes de la table d 5origine - ,ette commande correspond une cration et une insertion de &aleurs%
86
Slection de groupes de lignes en $onction d 5un crit.re Select O-+/ % ,*)/TP OdistinctQallP O(nomNcol0Q>P Krom nomNtab R#ere Ucondition2 G!*)A BT Onom-c<QnomNc;Q%P S@D+/G O/*TP prdicat< @/DQ*!P O/*TP prdicat; %%M !m"% La clause S@D+/G pour les groupes de lignes est similaire la clause RS.!. pour les lignes% .$: @ffic#er les dpartements dont le cumul des commissions est 2 J : Select deptno# sum9comm> !rom emp G43UP C0 deptno H+I8/G sum9comm> ' 0" - @ffic#er le dpartement a4ant le plus grand cumul de salaire : Select deptno# sum9sal> !rom emp G43UP C0 deptno H+I8/G sum9sal> ' 9Select M+F9SUM9sal>> !rom emp G43UP C0 deptno>" --oracle 97
27/08/2013
UNION
)xemple : ; tables de m'me structure et de contenus diffrents : depot< et deptot;: Structure : numprod, design, conditionnem, stoc7, ra4on, pu, t&a 17I<7 : lignes de une ou plusieurs tables (sans les doublons0 .$ : Lister les produits en stoc7s dans les ; dpBts : Select numpro# desi7n# pu# !rom depot1 U/83/ Select numpro# desi7n# pu# !rom depot<"
92
Diffrence MINUS (oracle) ou EXCEPT (postgres) : lignes existant dans une table mais pas dans une autre Ex : Lister les produits en stocks dans le dpt1 uniquement : Select numpro, design, pu, from depot1 MINUS Select numpro, design, pu, from depot2;
98
INTERSECTION
Ex: Afficher les produits identiques qui sont en stock dans les 2 dpts : Select numpro, design, pu From depot1 INTERSECT Select numpro, design, pu from depot2; Rmq : Les noms de colonnes du rsultats sont les noms de colonnes du 1er SELECT.
99
95
*n tra&aille sur les tables .-A et D.AT% ,es commandes permettent d 5insrer des &aleurs dans des tables, de supprimer des &aleurs ou de mettre our des &aleurs%
Insertion : I7S)90
J insertion d 5une ligne dans une ta+le : +/S.!T +/T* nomNtab ( OnomNcol< O, nomNcol;P %%P 0 D@L).S ( &al< O,&al;P %0 M
96
Ex1: Insrer un nouveau dpartement : 50, EDUCATION, MIAMI : Insert INTO dept VALUES (50, EDUCATION , MIAMI ); Rmq : On n a pas citer les colonnes quand on insre des valeurs pour toutes les colonnes ! Ex2:Insrer un employ en ne connaissant que le numro, le nom, le job et le numro de dpartement : Insert into EMP (empno, ename, job, deptno) VALUES (7950, JOHN , TRAINER , 50); /* on doit citer les colonnes */
97
.$: !emplacer dans le dpartement =J, la localit Y,S+,@G*5 par YL*S @/G.L.S5 : )AD@T. dept S.T loc 1 YL*S @/G.L.S5 R#ere deptno1=JM @ugmenter la commission de <J\ pour tous les emplo4s : Update emp SET comm = comm * 1.1;
98
Suppression : D)L)0)
D.L.T. K!*- nomNtab OR#ere conditionPM .W<% Supprimer toutes les lignes de la table B*/)S : *elete !rom bonus" .W;% Supprimer les emplo4s a4ant une commission non /)LL : *elete !rom emp $%ere comm is not null" !m" : L 5utilisateur doit 'tre propritaire de la table ou a&oir les droit D.L.T. sur celle-ci% Si la clause RS.!. est absente, toutes les lignes seront supprimes%
96
9emar#ues
- L 5utilisateur "ui lance la commande doit 'tre propritaire de la table ou a&oir re]u le droit )AD@T. sur la table - Le &erbe S.T indi"ue les colonnes modifier% Seules les colonnes spcifies seront modifies% - Si la condition RS.!. est absente, toutes les lignes spcifies dans S.T seront modifies% - L 5effacement d 5une colonne est ralis en utilisant l 5option /)LL : S.T nomNcol 1 /)LLM
57
51
1 2ali+ation +es mo+i#ications e##ect )es & C$%%IT [$or3 release]4 /5 work release par compatibilit) a,ec les ,ersions ant)rie res po r 6racle 5/ 1 'nn lation +es e##ets + / ne transaction & R$&&'#C( [$or3 release]4 /5 work release par compatibilit) a,ec les ,ersions ant)rie res po r 6racle 5/ Rmq & 7n *)n)ral0 a,ec S89 interacti#0 cha: e or+re est ne transaction "' tocommit . initialiser . 6;%. <onc les mo+i#ications ),ent elles se r)perc tent a tomati: ement "=ommit implicite po r l / tilisate r% 1 =6>>?@ et A699B'=C sont trDs tiles : an+ on tilise n lan*a*e proc)+ ral et/o ne inter#ace a,ec n lan*a*e +e pro*rammation.
52
Ex)ressions et onctions
58
)ne e$pression : combinaison de &ariables (contenu d 5une colonne0, de constantes et d 5autres e$pressions l 5aide des oprateurs : F, -, >, [ )ne fonction : routine a4ant des arguments et ramenant un rsultat (un argument peut 'tre une e$pression0 +l 4 a = t4pes d 5e$pressions : arit#mti"ues, c#aXnes de caract6res et date% @ c#a"ue t4pe 112 il 4 a des oprateurs spcifi"ues%
59
% .$emple de fonctions : /DL : /)LL D@L). (*racle0 permet de remplacer une &aleur /)LL par une &aleur significati&e% S4nta$e : /DL( e$p<, e$p;0 : ^ ren&oie la &aleur de e$p<, si e$p< non /)LL et de e$p; sinon%
PostrgreSQL
,*@L.S,.(arg<, arg;, , argn0 oV argi est une colonne d 5une La &aleur de la fonction est la premi6re &aleur /*T /)LL. table%
(oncatnation : met bout bout ; c#aXnes de caract6res% .W% @ffic#er les noms des emplo4s concatn leur mtier% Select ename QQ Y - 5 QQ ob @S _/*- - -.T+.!` from empM
56
27/08/2013
?onctions sur ( a-nes de caract.res S)BST! (c#aine, pos, n0 : e$trait de la c#aine Yc#aine5, partir de la position pos, n caract6res (ou le reste de la c#aine, si n absent% )AA.! (c#aine0 ou L*R.! (c#aine0 : transforme en ma uscules (ou minuscules0 la c#aine% L./GTS (c#aine0 : donne le nombre de caract6res de la c#aine%
56
27/08/2013
Insertion de lignes dans une ta+le 4 partir d 5une autre ta+le : I7S)90 (<racle)
+/S.!T +/T* nomNtab (nomNcol O, nomNcolP %%% 0 S.L.,T K!*- % RS.!. %%M .$: +nsrer dans une table B*/)S (ename, ob, sal, comm>, partir de la table emp, les emplo4s "ui sont S@L.S-@/ et dont la commission est suprieure ;Z\ du salaire : 8nsert 8nto C3/US Select ename# .ob# sal# comm Drom emp E%ere .ob&)S+,ESM+/- and 53MM ' 0.<? sal"
62
68
(ontraintes dKintgrit
Les contraintes d5intgrit sont des r6gles "ui doi&ent 'tre &rifies en permanence par le SGBD, "uel"ue soit l3opration effectue sur la base% Aarmi ces contraintes d3intgrit : la dfinition des cls primaires et des cls trang6res% l3indication des &aleurs possibles pour les attributs% !emar"ue : on les appli"uera dans la commande ,!.@T.%
(ontraintes dKintgrit
Principales contraintes P9I'29G L)G : dfinit une cl primaire (la &aleur est diffrente de /)LL et uni"ue dans la table0 12 toutes les lignes sont diffrentes ?<9)IG7 L)G : dfinit une cl trang6re% @ttribut (ou groupe0 fait rfrence une cl primaire dans une autre table 12 _contrainte d intgrit rfrentielle`% 7<0 71LL : la &aleur de l3attribut ne doit pas 'tre /)LL (dit 'tre renseigne0% 17IQ1) : c#a"ue tuple de la table doit a&oir une &aleur diffrente de celle des autres ou /)LL, pour l3attribut "ui a cette option% (M)(L : dfinit un ensemble de &aleurs possibles pour l3attribut% % D)?21L0 : donne une &aleur par dfaut (@ la cration du tuple, c3est la &aleur par dfaut "ui sera fournie, sauf saisie d3une &aleur0%
27/08/2013
,es contraintes ont le m'me t4pe de cons"uence : si on c#erc#e donner une &aleur un attribut "ui n5est pas conforme ce "ui est prcis dans la dfinition de l5attribut (&aleur /)LL s5il est dfini /*T /)LL ou A!+-@!T E.T, &aleur e$istant d s5il est dfini )/+Q). ou A!+-@!T E.T, &aleur n5appartenant pas au domaine spcifi par le ,S.,E0, alors le SGBD ren&oie un message d5erreur et ne modifie pas la base de donnes%
d5intgrit r$rentielle
,ons"uences <% Si on cre une table a&ec une cl trang6re, il faut "ue la table la"uelle on fait rfrence soit d cre 12 ordre logi"ue de cration des tables (l3ordre +/D.!S. pour la suppression0% ;% -'me c#ose pour la cration et la suppression de tuples (lignes0 : le m'me ordre de cration[suppression% =% !m" : on doit supprimer d3abord le tuple "ui rfrence, ensuite le tuple rfrenc, sinon +-A*SS+BL. de supprimer : c3est le ,@S par dfaut, S+/*/ : 12
Alusieurs cas : !n inter"it la mo"i#ication "$ t$ple : sit$ation par "%#a$t & +l faut supprimer d3abord toutes les rfrences ce tuple pour pou&oir ensuite le modifier0% % 'DATE CASCADE : m du tuple et des tuples "ui le rfrencent assignant la nou&elle &aleur de la cl primaire du tuple m au$ cls trang6res correspondantes dans les tuples "ui rfrencent% 'DATE SET N LL : modification du tuple rfrenc% Les tuples "ui le rfrencent se &oient assigns la &aleur /)LL (pour leurs cls trang6res0%
(9)20I<7 :
(9)20) 02BL) nomNtab ( UdefinitionNcolonne2 O, UdefinitionNcolonne2P 0M <N Cde$inition@colonneD est :
nom-col t4pe OD.K@)LT &alNdefautP O/*T /)LLP O)/+Q).P OautreP 0M
<N autre peut 6tre : - !.K.!./,.S nomNtab O ( nomNcol O, nomNcolP 0 P M - ,S.,E conditionM
9m# : *n peut nommer les contraintes
77
)xemple ,!.@T. T@BL. li&re ( codeNl +/T.G.! A!+-@!T E.T, titreNl D@!,S@!(=J0, prenom D@!,S@!(=J0 0M @&ec le nom de la contrainte : 12 ,!.@T. T@BL. auteur ( numNa +/T.G.!, nom D@!,S@!(=J0, (<7S092I70 cleNauteur A!+-@!T E.T (numNa0 0M
(ontraintes :
7<0 71LL : si on ne spcifie rien pour la &aleur d 5un attribut, il prend la &aleur /)LL (indtermine0% Si la clause /*T /)LL est prsente, on doit spcifier une &aleur non nulle pour cet attribut% D)?21L0 : on peut spcifier une &aleur par dfaut pour un attribut la cration de la table (cette &aleur doit 'tre du t4pe de l5attribut0% 17IQ1) : spcifie "u5un attribut (ou groupe 0 est une cl candidate% )n seul tuple correspond une &aleur de cette cl% +l est conseill de spcifier /*T /)LL pour un attribut dclar )/+Q). ("ui n 5est pas cl primaire0%
.$emple : ,reate table fournisseurs ( nomNfou c#ar(;Z0 /*T /)LL )/+Q). 0M (M)(L : spcifie une contrainte "ui doit 'tre &rifie tout moment par les tuples concerns% .$emple : (,reate table % (cliNt4pe c#ar(<H0 D.K@)LT YA@!T+,)L+.!5 ,S.E (cliNt4pe +/ (YA@!T+,)L+.!5, Y A-. 5, Y @)T!. 50
SQL : (9)20) 02BL) / (ontraintes (suite) La "uantit li&re doit 'tre infrieure ou gale la "uantit commande% "teNli& integer default J ,S.,E ("teNli& U1 "t]Ncom%0 @&ec /*T /)LL : ,S.,E (nomNfou +S /*T /)LL0 %% +nter&alle : % ,S.,E &alNpri$ B.TR../ <J @/D GJ (ontrainte d 5entit : P9I'29G L)G <- ,reate table client ( numcli c#ar(Z0 not null primar4 7e4, %%0M ;- Si la cl est compose (ici ; attributs 0 : ,reate table lignNcomm (ref c#ar(Z0 not null, design c#ar(<J0 not null, primary Oey (re$, design), %%0M
(I r$rentielle : 12 gestion correcte des modifications de la cl trang6re dans la table "ui rfrence et de la cl primaire dans la table rfrence% Soient les relations : client(numcl, %0 et commande(numcom, numcl,%%0 si on a oute une commande 12 il faut "ue le client associ e$iste%
SQL : (9)20) 02BL) / (ontraintes (suite) I solutions pour grer les ,ontraintes d3intgrit rfrentielles : <% Konction spcifi"ue crite par le programmeur : solution souple (on 4 met ce "u 5on &eut0 mais fastidieuse (une fonction dans c#a"ue application0% ;% _ trigger ` appropri dclenc# automati"uement% 1 une fonction compile, crite une fois et e$cute automati"uement c#a"ue fois "u5une action particuli6re est effectue% =% Drification assure par le SGBD automati"uement : la contrainte est dclare e$plicitement une fois pour toutes (&alable pour tout programme et utilisateur0% 12 adopte par la norme SQL-:; ou SQL-; (et donc dans beaucoup de SGBD0
SQL : (9)20) 02BL) / (ontraintes (suite) Dans les SGBD, mise en au&re de la solution = (intgrit rfrentielle dclarati&e0% .$emple : ,reate table client (numNcl c#ar(Z0 not null primar4 7e4, 0M ,reate table commande(numcomm integer not null primar4 7e4, % /umNcom c#ar(Z0 not null !.K.!./,.S client, %0M Si la cl trang6re 1 plusieurs attributs 12 utiliser K*!.+G/ E.T% K*!.+G/ E.T (atr<Ncle, attr;Ncle0 !.K.!./,.S (cleNprim<0% *n a oute la clause sui&ante : % /umNcom references client O<7 1PD20) PoptionQP O<7 D)L)0) PoptionQP oV option peut 'tre l 5une des options sui&antes
Point de 3ue de la ta+le r$rence Si on modifie la &aleur d 5une cl primaire rfrence, SQL permet de raliser automati"uement certaines oprations : 7< 2(0I<7 : "ui&alent ne pas mettre de clause */ )AD@T. ou */ D.L.T. 12 refus de modifier ou supprimer une cl primaire% Situation pas dfaut% <7 1PD20) A<7 D)L)0); (2S(2D) : si )AD@T. d 5une cl primaire rfrence 12 les modif sont rpercutes sur les relations "ui rfrencent% S+ D.L.T. 12 suppression des cls "ui rfrencent%
81
(9)20I<7 D)S 10ILIS20)19S 2S)( P9ISIL)G)S G!@/T O,*//.,TQ!.S*)!,.QDB@P T* nom-user +D./T+K+.D BT mot-passeM .W: Le DB@ cr l 5utilisateur )S.!< a&ec les pri&il6ges de conne$ion et de cration d 5ob ets : Grant connect, resource to )S.!< identified b4 lambdaM
9eprise de pri3il.ges
82
Attribution de droits sur les objets Les o32ets doi<ent =tre la proprits de l->,tilisate,r o, ?,->il a re@, les droits ncessaires : A"AN# BS L C#D0NS "#DD L # D;!DA# D0ND EDALLF o, 3ien A"AN# ;!DA# 1 nomGcol/ nomGcol/ H4 I ON nomGta31/ nomGta32/ H #O I K0#L A"AN# O!#0ON& B;1/ ;2/ ...D!;JL0CF
88
*V : +/D.W : donne la possibilit de crer des inde$% .$emple : ,!.@T. Ouni"ueP +/D.W ind */ nom-tab ( nom-col< OascQdescP, nom-col; OascQdescP, 0M [> pour amliorer les performances lors de la manipulation >[ - @LL : tous les droits - L 5option : _R+TS ,S.,E *AT+*/` signifie "ue celui a "ui l 5on accorde les droits spcifis peut lui-m'me les transmettre d 5autres% - .W : Grant select, update on emp to user< Lit# c#ec7 optionM
,!.@T. OA)BL+,P ST/*/T- nom-s4n K*! nom-tableM .W: )n utilisateur se cre un s4non4me pour s4s%emp : ,reate s4non4m l-emp Kor STS%empM L 5utilisateur STST.- (DB@0 cre un s4non4me accessible tout le monde pour sa table emp : .W: ,reate public s4non4m p-emp for STS%empM
85
86