Sunteți pe pagina 1din 50

Universitatea Constantin Brncui din Trgu-Jiu

Facultatea de Inginerie
Departamentul de Automatic, Energie i Mediu

BAZE DE DATE
LECTOR DR. ADRIAN RUNCEANU

10.05.2013

Curs - BAZE DE DATE

Curs 9
Limbajul SQL

10.05.2013

Curs - BAZE DE DATE

Limbajul SQL

Constrngeri

10.05.2013

Curs - BAZE DE DATE

Serverul Oracle utilizeaz constrngeri pentru a


preveni ptrunderea de date invalide n tabele.
Putem utiliza constrngeri pentru a realiza
urmtoarele actiuni:
1. Impune reguli datelor unui tabel ori de cte ori
un rnd este inserat, modificat sau ters din
tabel.
2. Previne tergerea unui tabel n cazul n care
exist dependen de alte tabele
3. Furnizeaz reguli pentru utilitile Oracle, cum ar
fi ORACLE DEVELOPER.

10.05.2013

Curs - BAZE DE DATE

Tipuri de constrangeri
Constrangere
NOT NULL
UNIQUE
PRIMARY
KEY
FOREIGN
KEY
CHECK

Descriere
specifica faptul ca o coloana nu poate avea valoarea nula
specifica o coloana sau o combinatie de coloane a carei valori trebuie
sa fie unice pentru toate randurile din tabel
identifica fiecare rand al tabelei
stabileste o relatie de cheie straina intre coloana si coloana tabelei de
referinta
specifica o conditie care trebuie sa fie adevarata

10.05.2013

Curs - BAZE DE DATE

Ghidul Constrngerilor
1. Toate constngerile sunt cuprinse ntr-un dicionar.

2. Este uor s se fac referin la constrngeri dac li se

d nume sugestive.
3. Numele unei constrngeri trebuie s urmeze un anumit
standard.
4. Dac nu se denumete constrngerea, server-ul Oracle
genereaz un nume de forma SYS_Cn, unde n este un
numar ntreg astfel nct numele constrgerii este unic.
5. Constrngerile definite pentru un anumit tabel pot fi
vizualizate n USER_CONSTRAINTS (dicionarul
tabelei).

10.05.2013

Curs - BAZE DE DATE

Definirea Constrangerilor
Sintaxa

CREATE TABLE [schema.] table


(column datatype [DEFAULT expr]
[column_constraint],

[table_constraint][...]);

10.05.2013

Curs - BAZE DE DATE

n sintaxa prezentat anterior avem:


este aceeasi ca si numele titularului
este numele tabelei
specifica o valoare predefinita care sa fie utilizata daca o
DEFAULT expr
valoare este omisa in declaratia INSERT
este numele coloanei
column
este tipul datei si lungimea coloanei
datatype
column_constraint este o constanta de integritate ca parte a definitiei coloanei
table_constraint este o constanta de integritate ca parte a definitiei tabelei
schema
table

10.05.2013

Curs - BAZE DE DATE

EXEMPLU
Adugarea unei constrngeri unui tabel odat cu
crearea lui.

Constrngere
CREATE TABLE angajati(
pentru coloan
ANGAJAT_ID number(6)
NUME varchar2(20)
SALARIU number(4)
MANAGER number(4)
FUNCTIE varchar2(20) NOT NULL CONSTRAINT
angajat_id_pk PRIMARY KEY(ANGAJAT_ID))
Constrngere
pentru tabel

10.05.2013

Curs - BAZE DE DATE

10

De obicei constrngerile sunt create n acelai

timp cu tabelul.
Constrngerile pot fi adugate tabelului dup
creearea lui.
Constrngerile pot fi definite pe 2 nivele:

Nivelul
constrangerii
Coloana
Tabel

Descriere
Face referire la o singura coloana; poate defini orice tip de
constrangere de integritate
Face referire la una sau mai multe coloane; poate defini orice
constrangere exceptand pe cea de tip NOT NULL

10.05.2013

Curs - BAZE DE DATE

11

Sintaxa:

1. Constrngere la nivel de coloan


column [CONSTRAINT constraint_name] constraint_type

2. Constrngere la nivel de tabel


column,..
[CONSTRAINT constraint_name] constraint_type
(column,...),

10.05.2013

Curs - BAZE DE DATE

12

In sintaxa avem:

constraint_name este numele constrangerii


constraint_type este tipul constrangerii

10.05.2013

Curs - BAZE DE DATE

13

Constrngerea NOT NULL


Constrngerea de tip NOT NULL asigur

faptul c o coloan s nu conin valoarea


nul.
Ea poate fi specificat la nivel de coloan i
nu la nivel de tabel.

10.05.2013

Curs - BAZE DE DATE

14

Exemplu

n exemplul urmtor constrngerea NOT


NULL se aplic coloanelor NUME i DATA_ANG
din tabelul angajat_nou.
Pentru coloana NUME constrgerea nu este
denumit astfel nct serverul Oracle o s creeze
un nume pentru ea.
Pentru coloana DATA_ANG constrngerea
este denumit: "...CONSTRAINT data_ang_nn
NOT NULL...".

10.05.2013

Curs - BAZE DE DATE

15

CREATE TABLE angajat_nou(


ANGAJAT_ID number(6)
NUME varchar2(10) NOT NULL
SALARIU number(4)
COMISION number(4)
DATA_ANG number(4) CONSTRAINT
data_ang_nn NOT NULL)

10.05.2013

Curs - BAZE DE DATE

16

Acum vom ncerca s inserm valori doar n


coloanele ANGAJAT_ID, SALARIU, COMISION,
dar la executarea ne va da eroare pentru c
NUME i DATA_ANG au valori nule iar
constrngerile ne oblig s le atribuim o valoare.

INSERT INTO angajat_nou(ANGAJAT_ID,


SALARIU, COMISION)
VALUES(50, 200, 5)

10.05.2013

Curs - BAZE DE DATE

17

Constrngerea UNIQUE
Constrngerea UNIQUE de integritate impune
ca fiecare valoare a unei coloane sau set de coloane
s fie unic - dou rnduri ale aceluiai tabel s nu
aib aceleai valori ntr-o anumit coloana sau set
de coloane.
Permite includerea de valori nule numai dac
constrngerea NOT NULL nu este definit pentru
aceeai coloan (valoarea nul nu este considerat
a fi echivalent cu ceva).
Constrngerea UNIQUE poate fi definit att la
nivel de linie ct i la nivel de tabel.

10.05.2013

Curs - BAZE DE DATE

18

Exemplu
n exemplul de mai jos se aplic constrngerea
UNIQUE coloanei EMAIL a tabelei angajat_nou1.
Numele constrngerii este angmail_un.
CREATE TABLE angajat_nou1(
ANGAJAT_ID number(6)
NUME varchar2(10) NOT NULL
EMAIL varchar2(20)
SALARIU number(4)
COMISION number(4)
DATA_ANG number(4) NOT NULL
CONSTRAINT angmail_un UNIQUE(EMAIL))

10.05.2013

Curs - BAZE DE DATE

19

Constrngerea Cheie Primar


Constrngerea CHEIE PRIMAR(PRIMARY KEY)

creeaz o cheie primar pentru tabel.


Numai o singur cheie poate fi creat pentru fiecare
tabel.
Aceast constrngere este o coloan sau un set de
coloane care identific n mod unic fiecare rnd al
tabelului.
Nici o coloan care face parte din cheia primar nu
poate conine valoarea nul.
Poate fi definit la nivel de coloan sau tabel.

10.05.2013

Curs - BAZE DE DATE

20

Un tabel poate avea o singur cheie primar dar


poate avea mai multe constrngeri de tip UNIQUE.
Exemplu
n exemplul de mai jos este definit o
constrngere de tip cheie primar la nivelul coloanei
ID_DEPT a tabelei DEPARTAMENTE. Numele
constrngerii este id_dept_pk

CREATE TABLE DEPARTAMENTE(


ID_DEPT number(6)
DENUMIRE varchar2(10)
ID_MANAGER number(6)
CONSTRAINT id_dept_pk PRIMARY
KEY(ID_DEPT))

10.05.2013

Curs - BAZE DE DATE

21

Constrngerea FOREIGN KEY


Constrngerea FOREIGN KEY definete o

coloan sau o combinaie de coloane ca


foreign key i stabilete o relaie ntre o cheie
primar i una unic n acelai tabel sau n
tabele diferite.
O valoare care apare ntr-un tabel trebuie s
se regseasc i n cel de-al 2-lea tabel, pe
coloana unde formeaz cheia primar.
Constrngerile de tip FOREIGN KEY pot fi
definite la nivel de coloan sau tabel.

10.05.2013

Curs - BAZE DE DATE

22

Exemplu
n urmtorul exemplu se definete o constrngere de
tip FOREIGN KEY coloanei ID_DEPT a tabelei
ANGAJAT_NOU2 utiliznd sintaxa la nivel de tabel.
CREATE TABLE ANGAJAT_NOU2(
ID_EMPNO number(6)
NUME varchar2(10)
SALARIU number(4)
COMISION number(4)
EMAIL varchar2(25)
ID_DEPT number(4) CONSTRAINT angdept_fk FOREIGN
KEY(ID_DEPT)
REFERENCES DEPARTAMENTE (ID_DEPT)
CONSTRAINT angmail_un UNIQUE (EMAIL))

10.05.2013

Curs - BAZE DE DATE

23

Se poate defini i la nivel de coloan. Sintaxa este


urmtoarea:

CREATE TABLE ANGAJAT_NOU2(


ID_EMPNO number(6)
NUME varchar2(10)
SALARIU number(4)
COMISION number(4)
EMAIL varchar2(25)
ID_DEPT number(4) CONSTRAINT angdept_fk
REFERENCES DEPARTAMENTE (ID_DEPT)
CONSTRAINT angmail_un UNIQUE (EMAIL))

10.05.2013

Curs - BAZE DE DATE

24

Dup cum am observat a disprut din

sintaxa FOREIGN KEY.


O contrngere de tip FOREIGN KEY este
definit ntr-un tabel copil, i tabelul care
conine coloana la care se face referin
este printele.

10.05.2013

Curs - BAZE DE DATE

25

O FOREIGN KEY este definit utiliznd o


combinaie a urmtoarelor cuvinte cheie:
FOREIGN KEY este utilizat pentru a defini o coloan n

tabelul copil la nivel de tabel


REFERENCES identific tabela i coloana n tabelul
printe
ON DELETE CASCADE indic faptul c atunci cnd
rndul din tabelul printe va fi ters, rndul dependent din
tabelul copil va fi de asemenea ters.
ON DELETE SET NULL convertete valorile FOREIGN
KEY n valori nule atunci cnd valoarea printe este
tears.

10.05.2013

Curs - BAZE DE DATE

26

Constrangerea de tip CHECK


Constrngerea de tip CHECK definete o condiie pe
care fiecare rnd trebuie s o satisfac.
Urmtoarele expresii nu sunt permise:
Referine la pseudocoloanele CURRVAL, NEXTVAL,
LEVEL i ROWNUM.
Apelul funciilor SYSDATE, UID, USER, i USERENV.
Cereri care se refer la alte valori ale altor rnduri
Nu exist un numar limitat de constrngeri de tip CHECK
pe care s le definim pe o coloan.
Constrngerea de tip check poate fi definit att la nivel de
coloan ct i la nivel de tabel.

10.05.2013

Curs - BAZE DE DATE

27

Exemplu

CREATE TABLE Angajat_nou3(


ID_ANG number(6)
NUME varchar2(10)
SALARIU number(4)
CONSTRAINT angsal_ck check(salariu>0))

10.05.2013

Curs - BAZE DE DATE

28

Adugarea unei constrngeri


Se poate aduga o constrngere pentru un
tabel existent utiliznd ALTER TABLE i clauza
ADD.
Sintaxa
ALTER TABLE table
ADD [CONSTRAINT constraint] type(column);

10.05.2013

Curs - BAZE DE DATE

29

n sintax avem:

este numele tebelului


table
constraint este numele constrangerii
este tipul constrangerii
type
column este numele coloanei afectate de constrangere

10.05.2013

Curs - BAZE DE DATE

30

Observaii
Se poate aduga, terge, activa sau
dezactiva o constrngere, dar nu-i putem
modifica structura.
Se poate aduga o constrngere NOT
NULL la o coloan existent utiliznd
clauza MODIFY a declaraiei ALTER
TABLE.

10.05.2013

Curs - BAZE DE DATE

31

Exemplu
Se poate aduga o constrngere i unui tabel
existent (nu numai odat cu crearea lui).
n urmtorul exemplu vom creea o
constrngere FOREIGN KEY n tabela ANG.
Constrngerea asigur existena unui manager
dac exist angajat n tabela ANG.
ALTER TABLE ANG
ADD CONSTRAINT angmgr_fk FOREIGN
KEY(MANAGER)
REFERENCES ANG (ID_ANGAJAT))

tergerea unei constrngeri


Pentru a terge o constrngere trebuie
utilizat declaraia ALTER TABLE cu clauza
DROP.
Opiunea CASCADE a clauzei DROP face ca
i constrngerea dependent s fie tears.
Sintaxa

ALTER TABLE table


DROP PRIMARY KEY| UNIQUE (column)|
CONSTRAINT constraint [CASCADE];

10.05.2013

Curs - BAZE DE DATE

33

n sintaxa avem

este numele tabelului


table
constraint este numele constrangerii
column este numele coloanei afectate de constrangere

10.05.2013

Curs - BAZE DE DATE

34

Exemplu
1.
n exemplul urmtor vom terge
constrngerea la nivelul coloanei MGR din tabel.
ALTER TABLE ANG
DROP CONSTRAINT angpmgr_fk

10.05.2013

Curs - BAZE DE DATE

35

2. n urmtorul exemplu vom terge constrngerea


cheie primar din tabelul DEPARTAMENTE i
cheia strin asociat coloanei ID_DEPT din
tabela Angajat_nou2.

ALTER TABLE DEPARTAMENTE


DROP PRIMARY KEY CASCADE

10.05.2013

Curs - BAZE DE DATE

36

Dezactivarea unei constrngeri


Dezactivarea constrngerii se
efectueaz cu declaraia ALTER TABLE
nsoit de clauza DISABLE.
Sintaxa
ALTER TABLE table
DISABLE CONSTRAINT constraint
[CASCADE];

10.05.2013

Curs - BAZE DE DATE

n sintaxa avem

este numele tabelului


table
constraint este numele constrangerii

37

10.05.2013

Curs - BAZE DE DATE

38

Observaii
Se poate utiliza clauza DISABLE att n
declaraia CREATE TABLE ct i n ALTER
TABLE.
Clauza CASCADE dezactiveaz constrngeri
de integritate dependente
Exemplu
ALTER TABLE DEPARTAMENTE
DISABLE CONSTRAINT id_dept_pk
CASCADE

10.05.2013

Curs - BAZE DE DATE

39

Activarea unei constrngeri


Se poate activa o constrngere fr
a o terge sau recreea utiliznd ALTER
TABLE cu clauza ENABLE.
Sintaxa
ALTER TABLE table
ENABLE CONSTRAINT constraint [CASCADE];

10.05.2013

Curs - BAZE DE DATE

n sintaxa avem
este numele tabelului
table
constraint este numele constrangerii

40

10.05.2013

Curs - BAZE DE DATE

41

Observaii
Dac se activeaz o constrngere, acest

constrngere se aplic la toate datele din tabel.


Dac se activeaz o constrngere UNIQUE sau

PRIMARY se creeaz automat un index UNIQUE


sau PRIMARY.
Clauza ENABLE se poate utiliza n ambele

declaraii CREATE TABLE ct i ALTER TABLE.

10.05.2013

Curs - BAZE DE DATE

Exemplu

ENABLE CONSTRAINT id_dept_pk

42

10.05.2013

Curs - BAZE DE DATE

43

Constrngeri Cascadate
Constrngerile de tip CASCADE sunt utilizate

cu clauza DROP COLUMN.


Constrngerea CASCADE terge toate

constrngerile de integritate ce se refer la


cheile primare i unice definite n coloanele
terse.
terge de asemenea toate constrngerile

multicoloane definite n coloanele terse.

10.05.2013

Curs - BAZE DE DATE

44

Vizualizare Constrngeri
Dup ce creem un tabel putem verifica

existena lui utiliznd o comanda DESCRIBE.

Singura constrngere ce se poate verifica este

constrngerea NOT NULL.

Pentru a se vizualiza toate constrngerile din

tabel trebuie interogat tabelul USERCONSTRAINTS.

10.05.2013

Curs - BAZE DE DATE

45

Exemplu

SELECT constraint_name, tale_name


FROM user_constraints
WHERE table_name = 'angajatnou'

10.05.2013

Curs - BAZE DE DATE

46

Exerciii Propuse

1. Adugai o constrngere PRIMARY KEY tabelei


ANG pe coloana ID_ANG. Constrngerea trebuie
de unic la creare. Numele constrngerii este
my_ang_id_pk.
2.tergei constrngerea creat mai sus.
3.Vizualizati constrangerile din tabela ANG.

10.05.2013

Curs - BAZE DE DATE

Soluie 1:

ALTER TABLE ANG


ADD CONSTRAINT my_ang_id_pk
PRIMARY KEY(ID_ANG));

47

10.05.2013

Curs - BAZE DE DATE

Soluie 2:

ALTER TABLE ANG


DROP CONSTRAINT my_ang_id_pk;

48

10.05.2013

Curs - BAZE DE DATE

49

Soluie 3:

SELECT constraint_name, tale_name


FROM user_constraints where table_name
= 'angajat'

10.05.2013

Curs - BAZE DE DATE

ntrebri?

50

S-ar putea să vă placă și