You are on page 1of 77

Curs III SQL - LIMBAJUL BAZELOR DE DATE RELATIONALE

SQL - Structured Query Language

Obiective
Aparitia limbajului SQL pentru baze de date. Tipuri de instructiuni SQL. Interogarea bazelor de date - SELECT SQL. Clauzele principale ale instructiunii SELECT. Moduri de a extrage date din mai multe tabele relationate din baza de date. Functii in SQL. Grupuri de date si functii de grup.

SQL - Structured Query Language

Obiective
Subinterogari simple.

Subinterogari multicoloana.
Interogari ce folosesc operatorii de multimi. Categorii de instructiuni DML:
inserari actualizari stergeri

Controlul tranzactiilor.
SQL - Structured Query Language

Definitii SQL SQL - Structured Query Language :


Numele generic al unei familii de limbaje de definitie, de manipulare si de control pentru o baza de date relationala. SQL a fost conceput ca un limbaj standard de descriere a datelor si acces la informatiile din baza de date. Ulterior s-a dezvoltat ca o adevarata tehnologie dedicata arhitecturilor sistemelor de baze de date client-server.

SQL este un limbaj standardizat (ANSI):


Diversele SGBD-uri au implementari proprii, mai mult sau mai putin diferite de standard.

SQL este atit un limbaj interactiv cit si integrat:


folosit din alte limbaje si medii cum ar fi xBase, C/C++, Java, Pascal etc SQL - Structured Query Language

Istoric SQL
Utilizat initial de firma IBM, SQL a devenit la mijlocul deceniului trecut un standard n domeniu. Primul standard SQL a fost creat n 1989 de catre ANSI (Institutul National American pentru standarde) fiind cunoscut sub numele de ANSI-SQL 89. Proliferarea n timp a diferitelor implementari ale limbajului SQL a determinat formarea consortiului SAG (The SQL Access Group), cu scopul de a concepe un set de standarde SQL, care sa aiba la baza un subset al standardului ANSI-SQL89 si sa rezolve probleme de implementarea acestora n arhitecturi client/server cum ar fi conectivitatea si interfetele de programare. Fiecare SGBD implementeaza limbajul standard SQL (sau un subset mai redus de instructiuni) la care adauga sau modifica instructiunile proprii. SQL - Structured Query Language

Proprietati ale BDR O baza de date relationala:


contine o colectie de tabele fara pointeri fizici poate fi accesata si modificata de instructiuni SQL foloseste un set de operatori relationali pentru implementarea instructiunilor SQL

Modelul Relational
Relatie Domeniu Atribut Tuplu Cheie primara Cheie externa

SQL
Tabel --Coloana Linie Cheie primara Referinta

SQL - Structured Query Language

Relationarea tabelelor Fiecare linie dintr-un tabel este identificata unic de cheia primara (PK). Se pot relationa logic date din tabele diferite prin cheile straine (FK).
Tabelul: ANGAJAT
MARCA 7839 10 7698 7782 NUME KING BLAKE CLARK JONES FUNCTIE PRESIDENT MANAGER MANAGER MANAGER NRDEPT

Tabelul: DEPARTAMENT
NRDEPT DENUMIERE LOCALITATE 10 ACCOUNTING 20 RESEARCH 30 SALES

30

NEW YORK DALLAS CHICAGO

10 7566

40
20

OPERATIONS

BOSTON

Cheie primara

Cheie externa

Cheie primara

SQL - Structured Query Language

Comunicarea SQL cu SGBD

Instructiunea SQL
SQL> SELECT localitate 2 FROM departament;

Instructiunea este trimisa la BD

Database

Afisarea rezultatelor
LOCALITATE

------------NEW YORK DALLAS CHICAGO BOSTON

SQL - Structured Query Language

Tipuri de instructiuni SQL


SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME TRUNCATE Data retrieval

Data manipulation language (DML)

Data definition language (DDL)

COMMIT ROLLBACK Transaction control SAVEPOINT GRANT REVOKE Data control language (DCL)

SQL - Structured Query Language

Tabele folosite in exemple


ANGAJAT
MARCA --------7839 7698 7782 7566 7654 7499 7844 DEPART 7900 NRDEPT --------10 20 30 40 NUME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES FUNCTIE SEF DATA_ANG SAL COM NRDEPT --------- --------- --------- --------- --------- --------PRESIDENT 17-NOV-81 5000 10 MANAGER 7839 01-MAY-81 2850 30 MANAGER MANAGER SALESMAN SALESMAN SALESMAN CLERK 7839 7839 7698 7698 7698 7698 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 1500 2975 1250 1600 1500 950 10 20 30 30 30 30

1400 300 0

7521 WARD DENUMIRE 7902 FORD -------------7369 SMITH ACCOUNTING 7788 SCOTT RESEARCH 7876 SALESADAMS 7934 MILLER OPERATIONS

SALESMAN LOCALITATE ANALYST ---------CLERK NEW YORK ANALYST DALLAS CLERK CHICAGO CLERK BOSTON

7698 7566 7902 7566 7788 7782

22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82

1250 500 30 GRADESAL 3000 20 800 20 GRAD SALMIN SALMAX 3000 --------- --------20 --------1100 1 20 700 1200 1300 2 10 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

SQL - Structured Query Language

Interogarea bazelor de date Interogarea bazelor de date relationale se face cu instructiunea SQL SELECT Instructiunea SELECT este complexa, formata din numeroase clauze si optiuni SELECT SQL implementeaza o serie de operatori relationali (selectie, proiectie, join) Instructiunea SELECT poate extrage date din una sau mai multe tabele ale bazei de date

SQL - Structured Query Language

Operatori relationali Selection Projection

Tabela 1

Join

Tabela 1

Tabela 1

Tabela 2

SQL - Structured Query Language

Instructiunea de baza SELECT


SELECT FROM [DISTINCT] {*, coloana [alias],...} tabel;

SELECT identifica ce coloane sunt afisate FROM identifica din care tabele sunt datele Instructiunile SQL nu sunt case sensitive Pot fi scrise pe mai multe linii Cuvintele cheie nu pot fi abreviate Clauzele se pun pe linii separate pentru lizibilitate
SQL - Structured Query Language

Valori NULL O valoare NULL este valoarea inexistenta, necunoscuta. Valoare NULL difera de sirul vid sau de 0.
SQL> SELECT 2 FROM nume, functie, com angajat;

NUME FUNCTIE COM ---------- --------- --------KING PRESIDENT BLAKE MANAGER ... TURNER SALESMAN 0 ... 14 rows selected.

SQL - Structured Query Language

Aliasuri de coloana Redenumeste numele unei coloane la afisare Este folositor la afisarea coloanelor calculate Se adauga dupa coloana Trebuie introdus intre ghilimele duble daca are spatii sau este case sensitive
SQL> SELECT nume as Nume, 2 sal*12 "Salar Anual" 3 FROM emp;
NUME Salar Anual ------------- ------------...

SQL - Structured Query Language

Eliminarea duplicatelor Liniile duplicate se elimina prin folosirea optiunii DISTINCT in clauza SELECT
SQL> SELECT DISTINCT nrdept 2 FROM angajat;

NRDEPT --------10 20 30

SQL - Structured Query Language

Limitarea liniilor rezultate Limitarea liniilor rezultate dintr-o instructiune SELECT se face prin clauza WHERE. Clauza WHERE urmeaza clauzei FROM. Clauza WHERE contine conditii logice simple sau complexe (legate cu operatorii logici AND si OR).
SELECT FROM [WHERE [DISTINCT] {*, coloana [alias], ...} tabe; conditii];

SQL - Structured Query Language

Operatori de comparatie
Operator = > >= < <= <> Semnificatie
Egal

Operator BETWEEN ...AND...

Semnificatie Intre 2 valori (inclusiv)

Mai mare
Mai mare sau egal Mai mic

IN(list)

Cuprins intr-o lista de valori

Mai mic sau egal


Diferit

LIKE

Corespunde unui sablon de caractere Este o valoare null

IS NULL

SQL - Structured Query Language

Exemplu ORDER BY
Afiseaza ordonat rezultatele interogarii: Este ultima clauza din instructiunea SELECT
SQL> SELECT nume, nrdept, sal 2 FROM angajat 3 ORDER BY nrdept, sal DESC; NUME NRDEPT SAL ---------- --------- --------KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected.

SQL - Structured Query Language

Date din tabele multiple


ANGAJAT
MARCA -----7839 7698 ... 7934 NUME ----KING BLAKE ... NRDEPT ... -----... 10 ... 30 10

DEPART
NRDEPT -----10 20 30 40 DENUMIRE ---------ACCOUNTING RESEARCH SALES OPERATIONS LOCALIT -------NEW YORK DALLAS CHICAGO BOSTON

MILLER ...

MARCA NRDEPT LOCALITATE ----- ------- -------7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... 14 rows selected.

SQL - Structured Query Language

Ce este un JOIN ? Interogare care extrage date din mai multe tabele:
SELECT FROM WHERE tabel1.coloana, tabel2.coloana tabel1, tabel2 tabel1.coloana1 = tabel2.coloana2;

Conditiile de legatura se scriu in clauza WHERE. Daca o coloana are acelasi nume in tabele diferite, se prefixeaza numele coloanei cu numele tabelei de unde provine.
SQL - Structured Query Language

Produs Cartezian Se efectueaza un produs cartezian atunci cind:


o conditie de join este omisa o conditie de join este invalida toate liniile din prima tabela sunt unite cu toate liniile din a doua tabela

Pentru evitarea unui produs cartezian se introduce o conditie de legatura valida in clauza WHERE a instructiunii SELECT.

SQL - Structured Query Language

Tipuri de Join

Equijoin Non-equijoin Outer join Self join

SQL - Structured Query Language

Equijoin
ANGAJAT
MARCA NUME NRDEPT ------ ------- ------7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected.

DEPART
NRDEPT ------10 30 10 20 30 30 30 30 30 20 20 ... 14 rows DENUMIRE ---------ACCOUNTING SALES ACCOUNTING RESEARCH SALES SALES SALES SALES SALES RESEARCH RESEARCH selected. LOCALIT -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS

Primary key

Foreign key

SQL - Structured Query Language

Non-equijoin
ANGAJAT
MARCA NUME SAL ------ ------- -----7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 rows selected.

GRADSALAR
GRAD SALMIN SAL ----- ----- -----1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

salarul in tabela ANGAJAT este intre salarul minim si salarul maxim in tabela GRADSALAR

SQL - Structured Query Language

Exemplu Non-equijoin

SQL> 2 3 4

SELECT FROM WHERE BETWEEN

a.nume, a.sal, b.grad angajat a, gradsalar s a.sal b.salmin AND b.salmax;

NUME SAL GRAD ---------- --------- --------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected.

SQL - Structured Query Language

Outer-join
ANGAJAT
NUME ----KING BLAKE CLARK JONES ... NRDEPT -----10 30 10 20

DEPART
NRDEPT -----10 30 10 20 ... 40 DENUMIRE ---------ACCOUNTING SALES ACCOUNTING RESEARCH OPERATIONS

Nu exista angajati in departamentul OPERATIONS

SQL - Structured Query Language

Outer-join
Se foloseste pentru a afisa linii care nu indeplinesc conditii de join normale (equijoin). In SQL standard cuvintele cheie sunt: LEFT OUTER JOIN, RIGHT OUTER JOIN Operatorul outer-join specific Oracle este (+).
SELECT table.column, table.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table.column, table.column FROM table1, table2 WHERE table1.column = table2.column(+);

SQL - Structured Query Language

Exemplu Outer-join
SQL> 2 3 4 SELECT FROM WHERE ORDER BY a.nume, d.nrdept, d.denumire angajat a, depart d a.nrdept(+) = d.nrdept a.nrdept;

NUME NRDEPT DENUMIRE ---------- --------- ------------KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS 15 rows selected.

SQL - Structured Query Language

Self-join
ANGAJAT (LUCRATOR)
MARCA ----7839 7698 7782 7566 7654 7499 NUME -----KING BLAKE CLARK JONES MARTIN ALLEN SEF ---7839 7839 7839 7698 7698

ANGAJAT (MANAGER)
MARCA NUME ----- -------7839 7839 7839 7698 7698 KING KING KING BLAKE BLAKE

SEF din tabela LUCRATOR este egal cu MARCA din tabela MANAGER " SQL - Structured Query Language

Caracteristici functii SQL


Confera interogarilor putere si flexibiltate.

Functiile pot fi folosite la:


Efectuarea de calcule asupra datelor din tabele Gestionarea liniilor individuale de date Gestionarea grupurilor de date Conversia tipurilor de date ale coloanelor unei tabele

Functiile SQL accepta argumente si returneaza valori. Functiile SQL sunt specifice fiecarui SGBD. Sunt prezentate functiile implementate de serverul Oracle.

SQL - Structured Query Language

Structura unei functii

Intrare arg 1

Functie Functia executa o actiune

Iesire

arg 2

Valoarea rezultata

arg n

SQL - Structured Query Language

Tipuri de functii SQL

Functii

Functii de un singur rind

Functii de mai multe rinduri

SQL - Structured Query Language

Functia de un singur rind


Nume_Functie (coloana|expresie, [arg1, arg2,...])

Preia argumente si intoarce o valoare.


Actioneaza asupra unui singur rind.

Intoarce un rezultat pentru fiecare rind.


Poate fi apelata imbricat.

Poate modifica tipul de date al unei expresii.


SQL - Structured Query Language

Functii de un singur rind


Siruri de caractere

Generale

Functii de un singur rind

Numerice

Conversie

Date calendaristice

SQL - Structured Query Language

Folosirea datelor calendaristice Serverul Oracle stocheaza valorile date calendaristice in formatul: secol, an, luna, zi, ora, minute, secunde. Formatul predefinit este DD-MON-YY. Functia care intoarce data sistemului este SYSDATE. Daca se aduna un numar la o data rezulta o data calendaristica. Diferenta intre doua date reprezinta numarul de zile dintre cele doua date calendaristice.
SQL - Structured Query Language

Functii de conversie

Conversii de tipuri de date

Conversii implicite de tipuri de date

Conversii explicite de tipuri de date

SQL - Structured Query Language

Conversii explicite
TO_NUMBER TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR

TO_CHAR

SQL - Structured Query Language

Convertirea datelor calendaristice in caractere


TO_CHAR(date, 'fmt')

Primul argument este data calendaristica care trebuie convertita. Al doilea argument este sirul de formatare. Sirul de formatare:
trebuie inclus intre apostroafe simple si este case sensitive poate include orice format valid de data calendaristica poate include subsirul fm pentru eliminarea spatiilor

SQL - Structured Query Language

Functia TO_CHAR cu date calendaristice

SQL> SELECT nume, 2 TO_CHAR(data_ang, 'fmDD Month YYYY') DATA_ANG 3 FROM angajat; NUME DATA_ANG ---------- ----------------KING 17 November 1981 BLAKE 1 May 1981 CLARK 9 June 1981 JONES 2 April 1981 MARTIN 28 September 1981 ALLEN 20 February 1981 ... 14 rows selected.

SQL - Structured Query Language

Functia NVL Converteste o valoare NULL la o valoare data. Tipurile de date acceptate sunt datele calendaristice, sirurile de caractere si numerele
SQL> SELECT nume, sal, com, (sal*12)+NVL(com,0) VENIT 2 FROM angajat;
NUME SAL COM VENIT ---------- --------- --------- -------------------KING 5000 60000 BLAKE 2850 34200 CLARK 2450 29400 JONES 2975 35700 MARTIN 1250 1400 16400 ALLEN 1600 300 19500

SQL - Structured Query Language

Functia DECODE
DECODE(col/expresie, cautare1, rezultat1 [, cautare2, rezultat2,...,] [, predefinit])

Functie de cautare conditionala echivalenta cu instructiunile CASE sau IF-THEN-ELSE. Primul argument este coloana sau expresia dupa care se face cautarea. Al doilea argument reprezinta valoare de comparatie, urmatorul este valoarea intoarsa in cazul in care conditia este adevarata. Ultimul argument este valoarea intoarsa daca toate conditiile sunt false.
SQL - Structured Query Language

Imbricarea functiilor Using the IN Operator F3(F2(F1(col,arg1),arg2),arg3)


Pas 1 = Rezultat 1 Pas 2 = Rezultat 2 Pas 3 = Rezultat 3

Functiile de un singur rind pot fi imbricate. Functia care se evalueaza prima este cea cu nivelul de imbricare cel mai mare.

SQL - Structured Query Language

Functii de grup
ANGAJAT
NRDEPT SAL --------- --------10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

salarul maxim din tabelul EMP

MAX(SAL) --------5000

SQL - Structured Query Language

Folosirea functiilor de grup


SELECT FROM [WHERE [ORDER BY coloana, functie_grup(coloana) tabel conditie] coloana];

Tipuri de functii de grup:


SUM AVG COUNT MAX MIN

SQL - Structured Query Language

Grupuri de date
ANGAJAT
NRDEPT SAL --------- --------10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

2916.6667

salarul mediu NRDEPT AVG(SAL) pe fiecare ------- --------departament 2175 10 2916.6667 20 2175 30 1566.6667
1566.6667

SQL - Structured Query Language

Clauza GROUP BY
SELECT FROM [WHERE [GROUP BY [ORDER BY coloana, functie_grup(coloana) tabel conditie] expresie_group_by] coloana];

Se pot imparti liniile unei tabele in grupuri folosind clauza GROUP BY. Orice coloana care apare in clauza SELECT si nu este intr-o functie de grup atunci trebuie sa apara in clauza GROUP BY.
SQL - Structured Query Language

Filtrarea grupurilor de date


EMP
DEPTNO SAL --------- --------10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

5000 salarul maxim pe departament sa fie mai mare ca 2900

3000

DEPTNO MAX(SAL) --------- --------10 5000 20 3000

2850

SQL - Structured Query Language

Clauza HAVING
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY column, group_function table condition] group_by_expression] group_condition] column];

Se foloseste clauza HAVING restrictioneaza grupurile de date:


liniile sunt grupate sunt aplicate functiile de grup grupurile care indeplinesc conditiile din clauza HAVING sunt afisate

SQL - Structured Query Language

Subinterogari
Cine are salarul mai mare ca salarul lui Jones ?
Interogarea principala

Care angajat are salarul mai mare ca salarul lui Jones ?


Subinterogare

Ce salar are Jones ?

SQL - Structured Query Language

Sintaxa subinterogarii
SELECT FROM WHERE coloane tabel expresie operator (SELECT FROM

coloane tabel)

Interogarea interna se executa o singura data, inaintea interogarii principale. Rezultatele subinterogarii sunt folosite de interogarea principala.

SQL - Structured Query Language

Reguli pentru subinterogari Subinterogarile se includ intre paranteze. Subinterogarea se plaseaza in partea dreapta a operatorului de comparatie. Clauza ORDER BY nu este permisa in subinterogare. Folositi operatori de o singura linie pentru subinterogari de o singura linie. Folositi operatori multi-linie pentru subinterogari care intorc mai multe linii.
SQL - Structured Query Language

Subinterogari in clauza FROM


SQL> 2 3 4 5 6 SELECT FROM a.nume, a.sal, a.nrdept, b.salmed angajat a, (SELECT nrdept, avg(sal) salmed FROM angajat GROUP BY nrdept) b a.nrdept = b.nrdept a.sal > b.salmed;

WHERE AND

NUME SAL NRDEPT SALMED ---------- --------- --------- ---------KING 5000 10 2916.6667 JONES 2975 20 2175 SCOTT 3000 20 2175 ... 6 rows selected.

SQL - Structured Query Language

Operatori cu multimi
A B

Intersect
A B A B

Union / Union All


A B

Minus
SQL - Structured Query Language

Reguli pentru operatorii de multime Expresiile din clauzele SELECT trebuie sa se potriveasca la numar si ca tip de date. Liniile duplicate sunt eliminate, exceptie facind operatorul UNION ALL. Numele coloanelor din prima interogare apar in rezultat. Predefinit, rezultatul este ordonat crescator. Se pot folosi parantezele pentru a schimba ordinea de executie.
SQL - Structured Query Language

Limbajul de manipulare a datelor O instructiune DML este executata cind:

se adauga o linie la o tabela se modifica o linie existenta se sterge o linie dintr-o tabela
O tranzactie consta intr-o colectie de instructiuni DML care alcatuiesc un modul logic de lucru.

SQL - Structured Query Language

Tipuri instructiuni DML Adaugarea datelor:


INSERT

Modificarea datelor:
UPDATE

Stergerea datelor:
DELETE

Instructiuni pentru controlul tranzactiilor:


COMMIT ROLLBACK SAVEPOINT

SQL - Structured Query Language

Sintaxa instructiunii INSERT


INSERT INTO VALUES tabel [(coloana [, coloana...])] (valoare [, valoare...]);

Insereaza o linie noua in tabela. Daca nu se afiseaza lista coloanelor trebuie sa se listeze valori pentru fiecare coloana din tabel. Ordinea valorilor trebuie sa corespunda cu ordinea coloanelor din tabel. Optional se poate afisa si lista coloanelor. Valorile sir de caractere si data calendaristica se introduc intre apostroafe.
SQL - Structured Query Language

Actualizarea datelor
UPDATE SET [WHERE tabel coloana = valoare [, coloana = valoare] conditie];

Se modifica valorile dintr-un tabel. Daca nu se specifica o clauza WHERE atunci vor fi actualizate toate liniile din tabel. In functie de conditia din clauza WHERE se pot actualiza 0, 1 sau mai multe linii din tabel.

SQL - Structured Query Language

Constringeri de integritate

SQL> UPDATE 2 SET 3 WHERE

angajat nrdept = 55 nrdept = 10;

UPDATE angajat * ERROR at line 1: ORA-02291: integrity constraint (USR.ANGAJAT_DEPT_FK) violated - parent key not found

SQL - Structured Query Language

Sintaxa instructiunii de stergere


DELETE [FROM] [WHERE tabel conditie];

Se pot sterge linii din tabel cu DELETE. Liniile sterse sunt cele care indeplinesc conditiile din clauza WHERE. Daca nu exista clauza WHERE se sterg toate liniile din tabel.

SQL - Structured Query Language

Tranzactii ale bazei de date O tranzactie a bazei de date consta in:


instructiuni DML care executa modificari consistente ale datelor o instructiune DDL o instructiune DCL

O tranzactie incepe cu prima instructiune DML. O tranzactie se termina la unul din urmatoarele evenimente:
COMMIT sau ROLLBACK instructiuni DDL sau DCL (se executa un COMMIT automat) deconectarea utilizatorului pica sistemul SQL - Structured Query Language

Zavoarele Zavoarele Oracle: previn interactiunile distructive intre tranzactiile concurente nu necesita actiunea utilizatorului automat folosesc cel mai jos nivel de restrictivitate sunt mentinute pe durata unei tranzactii sunt de doua tipuri:
exclusive partajate SQL - Structured Query Language

Tranzactii concurente
Fiecare tranzactie executata complet trebuie sa lase baze de date intr-o stare consistenta:
utilizatorii specifica restrictiile de integritate pe care SGBD-ul le aplica SGBD-ul nu intelege semnificatia datelor Utilizatorul are responsabilitatea ca o tranzactie sa lase baza de date intr-o stare consistenta

SGBD asigura ca executia {T1, ... , Tn} este serializabila.

Inainte de a scrie/citi un obiect, o tranzactie cere un zavor (lock) asupra obiectului, si asteapta pana SGBD asigura acel zavor. Toate zavoarele sunt sterse la sfarsitul tranzactiei. Ideea: daca actiunea tranzactiei Ti (de scriere a lui X) afecteaza Tj (care citeste X), Ti va obtine zavorul pe X iar Tj este fortata sa astepte pana Ti se termina; acest mecanism ordoneaza tranzactiile. Putem avea cazul cand Tj are deja un zavor pe Y iar Ti va cere la randul ei un zavor pe Y. In acest caz avem Deadlock. Ti sau Tj este restartata.

SQL - Structured Query Language

Axiome ACID A tomicitate: Toate actiunile unei tranzactii se produc toate sau nici una (all-or-nothing). C onsistenta: Daca fiecare tranzactie este consitenta si daca baza de date se starteaza consistenta atunci ea ramane consistenta in orice moment. I zolarea: Executia unei tranzactii este izolata de celalte tranzactii. D urabilitate: Daca o tranzactie comite atunci efectele sale sunt permanentizate.

SQL - Structured Query Language

Avantajele COMMIT si ROLLBACK COMMIT - permanentizeaza schimbarile in baza de date. ROLLBACK - anuleaza schimbarile facute in tranzactia curenta si aduce baza de date in starea anterioara tranzactiei curente. Asigura consistenta datelor. Permit vizualizarea datelor inainte de a permanentiza schimbarile in baza de date. Grupeaza operatiile relationate logic.
SQL - Structured Query Language

Controlul tranzactiilor
Tranzactie INSERT
COMMIT

UPDATE

INSERT

DELETE

Savepoint A

Savepoint B

ROLLBACK to Savepoint B

ROLLBACK to Savepoint A

ROLLBACK

SQL - Structured Query Language

Procesarea implicita a tranzactiilor Se executa un COMMIT automat in urmatoarele conditii:


este lansata o instructiune DDL este lansata o instructiune DCL utilizatorul de deconecteaza in mod normal de la baza de date

Se executa un ROLLBACK automat in cazul unei deconectari anormale sau cind sistemul pica (software sau hardware).

SQL - Structured Query Language

Starea datelor inainte de ROLLBACK sau COMMIT Poate fi restaurata starea anterioara a datelor. Utilizatorul poate vizualiza modificarile facute prin instructiunile DML prin instructiuni SELECT. Alt utilizator nu poate vedea modificarile facute de utilizatorul curent. Liniile modificate sunt blocate. Alt utilizator nu poate modifica datele schimbate de utilizatorul curent.

SQL - Structured Query Language

Starea datelor dupa COMMIT Schimbarile efectuate sunt permanentizate in baza de date. Starea anterioara a datelor este pierduta. Toti utilizatorii pot vizualiza datele modificate. Liniile blocate sunt accesibile si pentru alti utilizatori pentru modificare. Sunt sterse toate punctele de salvare marcate pe parcursul unei tranzactii.

SQL - Structured Query Language

Starea datelor dupa ROLLBACK

Se anuleaza schimbarile prin comanda ROLLBACK:


sunt anulate modificarile asupra datelor starea anterioara a datelor este restaurata liniile blocate sunt eliberate pentru modificari

SQL - Structured Query Language

ROLLBACK la nivel de instructiune DML Daca o instructiune DML nu reuseste sa se execute cu succes, numai acea instructiune este anulata. Serverul Oracle implementeaza un punct de salvare implicit. Toate celelalte schimbari sunt mentinute. Utilizatorul trebuie sa incheie tranzactia printr-o instructiune explicita de COMMIT sau ROLLBACK.

SQL - Structured Query Language

Consistenta la citire Consitenta la citire garanteaza o vedere consistenta a datelor in orice moment. Schimbarile efectuate de un utilizator nu intra in conflict cu schimbarile facute de alt utilizator. Se asigura ca pentru aceleasi date: cititorii nu asteapte scriitorii scriitorii nu asteapta cititorii

SQL - Structured Query Language

Implementarea consitentei la citire

UPDATE angajat SET sal = 2000 WHERE nume = 'SCOTT';

Data blocks Rollback segments

User A
SELECT * FROM angajat;

Read consistent image

changed and unchanged data before change old data

User B
SQL - Structured Query Language

Concluzii S-au introdus definitii ale limbajului SQL. S-au urmarit principalele etape in istoricul aparitiei limbajului SQL. S-au enumerat principalele tipuri de instructiuni SQL. Sintaxa de baza SELECT SQL Clauzele instructiunii de interogare: SELECT, FROM, WHERE, ORDER BY. Extragerea datelor din mai multe tabele.
SQL - Structured Query Language

Concluzii Functii SQL de un singur rind:


pentru siruri de caractere pentru date calendaristice pentru numere functii de conversie functii generale

Grupuri de date si functii de grup. Subinterogari simple, multi-linie si multicoloana. Interogari ce folosesc operatori de multimi: reuniunea, intersectia, diferenta.
SQL - Structured Query Language

Concluzii Limbajul de interogare a datelor (DML):


adaugarea datelor (INSERT) modificarea datelor (UPDATE) stergerea datelor (DELETE)

Controlul tranzactiilor:
COMMIT ROLLBACK puncte de salvare (SAVEPOINT) consistenta la citire zavoare Oracle
SQL - Structured Query Language

You might also like