Sunteți pe pagina 1din 21

SQL- Tabele-restricții

Curs

1
Restricții de nenulitate
 Toate coloanele acceptă NULL - absența valorii
 NOT NULL – obligă coloana unui tabel să conțină o
valoare nenulă
 CREATE TABLE employees( employee_id NUMBER(6),
first_name VARCHAR2(20), last_name
VARCHAR2(25) CONSTRAINT emp_last_name_nn_demo
NOT NULL)
 CREATE TABLE employees( employee_id NUMBER(6),
first_name VARCHAR2(20), last_name
VARCHAR2(25) NOT NULL)
 DataFact DATE DEFAULT SYSDATE NOT NULL

2
Restricții de domeniu
 CREATE TABLE employees( employee_id
NUMBER(6), first_name
VARCHAR2(20), last_name
VARCHAR2(25) NOT NULL, regiune
VARCHAR2(20) CONSTRAINT ck_regiune
CHECK (regiune in (‘Dobrogea',
‘Moldova', ‘Muntenia‘, ‘Oltenia‘,
‘Transilvania‘))

3
Cheie primară/unicitate
 Clauza PRIMARY KEY
 Amplasată după atributul cheie;
 Amplasată după ultimul atribut din cadrul
tabelei(utilizată când avem un atribut
multiplu);
 Not null și unique.
 Clauza UNIQUE
 Folosită pentru cheile candidat;
 Obligă la introducerea de valori nenule în
câmpul respectiv.
4
Cheie primară/unicitate
 CONSTRAINT emp_email_uk_demo UNIQUE
(email)
 Iddoctor NUMBER(8) CONSTRAINT pk_doctori
PRIMARY KEY
 CREATE TABLE garzi (……, sfarsit_garda
TIMESTAMP, CONSTRAINT pk_garzi PRIMARY
KEY (iddoctor,inceput_garda))
 Judet VARCHAR2(25) CONSTRAINT un_judet
UNIQUE
 CONSTRAINT un_liniifact UNIQUE(nrfact,codpr)

5
Restricții referențiale
 Clauza FOREIGN KEY
 CREATE TABLE produse (codp NUMBER(3) CONSTRAINT
pk_codp PRIMARY KEY, denp VARCHAR2(30) NOT NULL,
coddep VARCHAR2(15), ump VARCHAR2(5) CONSTRAINT
ck_ump CHECK(ump IN(‘buc’, ’kg’, ‘l’, ‘mp’, ‘mc’, ‘ml’)))
 CREATE TABLE stocuri(codp NUMBER(3) CONSTRAINT fk_codp
REFERENCES produse(codp), cant NUMBER(4), pret
NUMBER(4), an NUMBER(4) NOT NULL, CONSTRAINT
pk_stocuri PRIMARY KEY(codp,an))
 sau
 CREATE TABLE stocuri(codp NUMBER(3),cant NUMBER(4), pret
NUMBER(4), an NUMBER(4) NOT NULL, CONSTRAINT
pk_stocuri PRIMARY KEY(codp,an), CONSTRAINT fk_codp
FOREIGN KEY(codp) REFERENCES produse(codp))

6
Acțiuni definite de restricțiile
referențiale
 Constrângerile de integritate referențială
pot determina efectuarea unor acțiuni
particulare în cadrul înregistrărilor
dependente dintr-un tabel copil în
momentul în care valoarea cheii din
tabelul referit se modifică;
 Acțiuni suportate de constrângerea
FOREIGN KEY din ORACLE: UPDATE,
DELETE NO ACTION și DELETE CASCADE

7
Acțiuni definite de restricțiile
referențiale
 UPDATE și DELETE NO ACTION –
valoarea referită nu poate fi modificată
sau ștearsă dacă rezultatele încalcă
regulile de integritate referențială. De
exemplu, o cheie primară are un cel
puțin o valoarea corespondentă în cheia
străină aferentă unui alt tabel; rezultă
că această cheie primară nu poate fi
stearsă din cauza acestui motiv

8
Acțiuni definite de restricțiile
referențiale
 DELETE CASCADE – are loc în momentul în
care prin ștergerea unei valori dintr-un câmp
ce este cheie primară într-un tabel, se șterg
toate valorile corespondente din cheia străină
aferentă tabelului copil. De exemplu, dacă este
ștearsă o înregistrare din tabelul părinte , iar
valoarea din cheia primară este referită într-un
alt tabel în mai multe înregistrări, toate aceste
înregistrări vor fi șterse automat în cascadă.

9
Acțiuni definite de restricțiile
referențiale
 CREATE TABLE supplier (supplier_id
NUMBER(10) NOT NULL, supplier_name
VARCHAR2(50) NOT NULL, contact_name
VARCHAR 2(50), CONSTRAINT supplier_pk
PRIMARY KEY (supplier_id));
 CREATE TABLE products(product_id
NUMBER(10) NOT NULL, supplier_id
NUMBER(10) NOT NULL, CONSTRAINT
fk_supplier FOREIGN KEY (supplier_id)
REFERENCES supplier(supplier_id) ON DELETE
CASCADE);
10
Acțiuni definite de restricțiile
referențiale
 DELETE SET NULL – o ștergere
determină salvarea unei valori nule când
înregistrarea conține o valoare referită
din alt tabel care este ștearsă, astfel
toate înregistrările din tabelul copil care
au acea valoare în câmpul cheie străină
permit stocarea valorii null. În concluzie,
înregistrările din tabelul copil nu vor fi
șterse

11
Acțiuni definite de restricțiile
referențiale
 CREATE TABLE supplier(supplier_id
NUMBER(10) NOT NULL, supplier_name
VARCHAR 2(50) NOT NULL, contact_name
VARCHAR 2(50), CONSTRAINT supplier_pk
PRIMARY KEY (supplier_id));
 CREATE TABLE products(product_id
NUMBER(10) NOT NULL, supplier_id
NUMBER(10), CONSTRAINT fk_supplier
FOREIGN KEY (supplier_id) REFERENCES
supplier(supplier_id) ON DELETE SET NULL);

12
Acțiuni definite de restricțiile
referențiale
Comanda DML Tabelul părinte Tabelul copil

INSERT Tot timpul OK dacă valorile OK numai dacă valorile cheii


din cheie sunt unice. străine există și în tabelul
părinte, sau sunt nule

UPDATE No Action Permise doar dacă această Permisă dacă noua valoare are
modificare nu determină corespondent în tabelul părinte.
apariția în cadrul tabelului
copil a unor înregistrări fără
echivalent în tabelul părinte.
DELETE No Action Permisă dacă nu sunt valori ale OK.
cheii primare referite în tabelul
copil.
DELETE Cascade OK. OK.
DELETE Set Null OK. OK.
13
Restricții utilizator
 Reguli de validare la nivel de câmp, de
înregistrare sau pot fi, chiar, incluse in
declanșatoare;
 Clauza CHECK
 codc NUMBER(6) CONSTRAINT pk_codc
PRIMARY KEY CONSTRAINT ck_codc
CHECK(codc>0)
 datai DATE DEFAULT CURRENT_DATE NOT
NULL CONSTRAINT ck_datai
CHECK(datai>=datav)

14
Restricții utilizator
 O restricție utilizator definită într-o tabelă se poate
referi doar la câmpurile acelei tabele;
 O restricţie utilizator nu poate conţine o
subinterogare;
 CREATE TABLE suppliers(supplier_id NUMBER(4),
supplier_name VARCHAR2(50), CONSTRAINT
ck_supplier_id CHECK (supplier_id BETWEEN 100
and 9999));
 CREATE TABLE suppliers(supplier_id NUMBER(4),
supplier_name VARCHAR2(50), CONSTRAINT
ck_supplier_name CHECK (supplier_name =
UPPER(supplier_name)));

15
Modificarea structurii unei
tabele
 Adăugare de coloană;
 Modificare de coloană;
 Ştergerea unei coloane;
 Redenumirea unei coloane;
 Redenumirea unui tabel.

16
Modificarea structurii unei
tabele
 Adăugare de coloană:
 ALTER TABLE clienti ADD denc VARCHAR2(45);
 Adăugare de coloane multiple:
 ALTER TABLE clienti ADD (denc VARCHAR2(45),
adresac VARCHAR2(40));
 Modificarea unei coloane:
 ALTER TABLE clienti MODIFY denc VARCHAR2(100)
NOT NULL;
 Modificarea de coloane multiple:
 ALTER TABLE clienti MODIFY (denc VARCHAR2(45),
adresac VARCHAR2(40));

17
Modificarea structurii unei
tabele
 Ştergerea unui atribut:
 ALTER TABLE clienti DROP COLUMN denc;
 Redenumirea unei coloane:
 ALTER TABLE clienti RENAME COLUMN denumire TO
denc;
 Redenumirea unui tabel:
 ALTER TABLE parteneri RENAME TO clienti;
 Adăugarea, modificarea valorii implicite a unui
atribut
 ALTER TABLE clienti MODIFY(adresac VARCHAR2(30)
DEFAULT ‘Suceava' );

18
Modificarea structurii unei
tabele
 Anularea unei valori implicite:
 ALTER TABLE clienti MODIFY adresac DEFAULT NULL;
 Instituirea restricţiei de nenulitate:
 ALTER TABLE employee MODIFY (first_name NOT
NULL);
 Ştergerea unei restricţii:
 ALTER TABLE furnizori DROP CONSTRAINT ck_codf;
 Adăugarea unei restricţii la nivel de câmp:
 ALTER TABLE furnizori ADD CONSTRAINT ck_denf
CHECK (denf IN ('IBM', 'Microsoft', 'NVIDIA'));

19
Modificarea structurii unei
tabele
 Adăugarea proprietăţii de cheie primară unui câmp:
 ALTER TABLE furnizori ADD CONSTRAINT codf_pk PRIMARY
KEY (codf);
 Ştergerea proprietăţii de cheie primară:
 ALTER TABLE furnizori DROP CONSTRAINT codf_pk;
 Activarea unei constrângeri la nivel de câmp:
 ALTER TABLE furnizori ENABLE CONSTRAINT ck_codf;
 Dezactivarea unei constrângeri la nivel de câmp:
 ALTER TABLE furnizori DISABLE CONSTRAINT ck_codf;

20
Ștergerea tabelelor
 Ștergerea tabelelor
 TRUNCATE TABLE
 Ștergerea tuturor liniilor din tabel
 TRUNCATE TABLE employees_demo;
 DROP TABLE
 Introducerea tabelului într-un Recycle Bin
 DROP TABLE employees_demo;
 Ștergerea tabelului din memorie
 DROP TABLE employees_demo PURGE;
 Ștergerea tabelului cu tot cu contrângerile referențiale atașate lui
 DROP TABLE employees_demo CASCADE CONSTRAINTS;

21

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