Documente Academic
Documente Profesional
Documente Cultură
Disciplina: SGBD
Tematica i repartizarea orientativ a orelor la curs/prelegeri. Specialitile IA, MnI
1.
Bibliogrfie
Connolly Thomas, Beg C. Databases System, Addison Wesly 2003.
C.J.Date Baze de date, Editura E+ 2005.
Fotache Marin, Strmbei C., Creu L. Oracle 9i2. Ghidul dezvoltrii aplicaiilor
profesionale. Iai: Polirom, 2003.
.. SQL. http://www.intuit.ru/department/database/sql/
. SQL Server:
, XML, HTML.
1.
U1
U5
U6
U4
Server
BD1
Server
BD2
U2
U12
U3
Server
BD3
U11
U7
U9
U8
U10
Client
Server
Baza de date
bazele de date din care se extrag informaiile dorite. Scopul principal este autonomia
utilizatorului (angajatului).
"-"
,
. ,
"-",
, , ,
.
Se poate spune c arhitectura sistemului de baz de date se proiecteaz pe structura
(topologia) reelei de calcul.
Istoric vorbind, evoluia tehnologic de la sisteme de baze de date centralizate spre
client/server a trecut printr-o etap intermediar numit arhitectura file/server.
Aceast arhitectur const n schimb cu fiiere prin liniile de reea (exemplu
FoxPro). Dezavantajul ei principal circulaia volumelor mari de date prin liniile de
comunicaie. (De revizuit)
n tehnologia client/server sistemul (informaional, de calcul) se divizeaz n dou
pri... ,
, - .
,
.
.
" " ,
"-", ,
.
.
,
,
.
.
SQL. SQL
.
(
).
SQL
. SQL-
, SQL.
,
, SQL-.
( ).
2.1. Prelucrarea distribuit a datelor
Cum s-a spus mai sus, arhitectura sistemului de baze de date distribuit se bazeaz pe
structura sistemului distribuit de calcul folosind tehnologia client/server de
interaciune ntre componentele constituiente. Cu privire la baze de date arhitectura
client/server poate fi realizat n trei structuri care determin trei categorii de
prelucrare al datelor:
o baz de date centralizat n arhitectura client/server. Mai muli clieni
sunt deservii de un server;
prelucrare cooperativ. Datele unei aplicaie sunt mprtiate pe diferite
sisteme (servere). Clientul are acces la oricare server (Fig. 1.1) dar n unul i
acelai moment de timp poate se adreseze interogarea numai la un server. n
aceast modalitate el nu poate obine combinaii de date din mai multe tabele.
Plus la aceasta el trebuie s tie pe care server se gsesc datele cerute;
prelucrare distribuit. Aplicaia (datele i componentele de gestiune) este
mprtiat pe mai multe sisteme care ruleaz simultan. Fiecare main poate
se joace rolul ct al clientului, att i al serverului. Cu alte cuvinte fiecare
main asigur funcionarea unui sistem de baze de date deplin. Clientul are
acces la oricare server simultan i n unul i acelai moment de timp poate se
adreseze interogri la oricare server. Poate se obin combinaii de date din
mai multe tabele i nu trebuie neaprat s tie unde se gsesc acestea date.
Ultimul din enumerate mai sus sisteme este un adevrat sistem de baze de date
distribuite. n acest sistem datele sunt transparente fa de aplicaii i pot fi memorate
pe diferite platforme cu diferite sisteme de operare. Din acest punct de vedere sunt
posibile sisteme de baze de date distribuite omogene i eterogene.
(omogene i eterogene)
.
.
.
- , .
, ,
(Fig. 1.2) .
, SQL- . ,
SQL
.
,
90- . -
,
, , .
,
. ,
.
( ) ,
.
. ,
, .
, main-,
, ,
.
,
, .
,
- ,
,
.
,
,
.
.
5 , :
.(Presentation Logic);
10
,
(Business Logic);
(Database Logic);
(Database Manager System);
, .
, . 10.2.
(Presentation Logic) ,
, ,
,
, ,
.
:
;
;
;
.
- ,
11
, :
12
. ,
.
.
(File
Server, FS). -
. .
.
. 10.4.
,
, ,
-, . ,
.
( ) ,
.
.
?
.
.
, ,
13
,
. .
, .
:
, , ;
,
' ;
( ).
(Remote Data Access, RDA) .
.
- . SQL.
. 10,5,
:
,
;
;
, .
( , ,
, , ,
);
,
- , SQL,
14
. ,
, ,, FS-.
RDA- -,
- SQL.
;
Q - SQL
;
. , ,
-
. ;
Q ,
. ,
,
, , ,
,
, , ,
,
. , ,
.
,
:
1. ,
, ,
. , ,
.
2. , ,
(business rules). , ^
, (
) ,
,
, . .
3. ,
: ,
,
.
15
4.
, .
.
5. ,
-
, , DDL (data definition language)
, SQL.
,
, , ,
.
, : Informix, Ingres, Sybase,
Oracle, MS SQL Server.
SQL-,
,
. . 10.6.
- . - ,
.
,
, .
, ,
, -,
. .
. .
16
, .
,
. ,
,
.
, .
.
,
, .
,
.
, , ,
, .
, ,
,
.
SQL, SQL. SQL 12.
. ,
;
, ;
;
;
;
;
;
: ,
, ,
.
- ,
.
, ,
. .
.
17
0 .
. 10.7.
.
. :
,
, ;
, ,
-. front-end
, .
,
,
,
.
.
,
, ,
, ,
.
:
,
, (warehouse services).
,
,
() (legacy application).
, , .
,
,
OLAP-. (On-line analytical processing.) 18
SQL,
, ,
, C++, SmallTalk, CoboL ,
.
- (X/Open transaction interface
protocol), .
- .
*.
.
.
,
.
, , ,
( ) .
: ,
- ,
- (. 10.8),
(),
.
,
, , ,
19
, ,
.
,
, ira , ,
,
,
, .
.
, .
, -*,
, .
(. 10.9).
(thread), , .
(multi-threaded).
,
(trashing).
,
(
),
. , - 100 ,
,
.
20
.
,
. , , " ,
, .
.
(virtual server) (.
10.10).
,
, ,
.
.
.
,
, ,
(load balancing)
*. -,
,
-,
.
-
, ,
()
() ( ). ,
( ),
, ,
.
,
.
21
, -
. " .
,
, , 10,11.
.
.
.
,
,
.
,
(. 10.12).
, ,
. (treads),
,
.
22
2.4. Tehnologia RPC (Remote Procedure Call) de acces la date. Idea, diferena
dintre procedur stocat (local?) i RPC.
2.5. Web tehnologii de acces la date. Tehnologii Intranet
23
SQL-92 .
,
.
SQL:2003
SQL.
3.2. SQL:2003
, , SQL:1999,
SQL:1999. , SQL:2003
.
, .
SQL:2003 :
9075-1, SQL/Framework;
9075-2, SQL/Foundation;
9075-3, SQL/CLI;
9075-4, SQL/PSM;
9075-9, SQL/MED;
9075-10, SQL/OLB;
9075-11, SQL/Schemata;
9075-13, SQL/JRT;
9075-14, SQL/XML.
;
, SQL;
CREATE TABLE;
;
25
(identity column)
(generated column);
MERGE;
1 .
SQL:2003 , .
;
.
, XML
SQL:2003 BIT BIT VARYING.
, SQL-
, -
. SQL
( SQL:1999).
BIGINT. BIGINT
SQL INTEGER SMALLINT, (,
) .
INTEGER ( , ),
32- .
64- BIGINT.
.
14 SQL:2003 XML (XML type),
, , XML-.
, XML,
..
SQL:1999
SQL ,
. ARRAY.
SQL:2003
. -, MULTISET.
-,
SQL , .
SQL-
.
26
3. SQL ,
.
.
. .
:
;
,
(SELECT, PROJECT, JOIN).
12 .
SQL ,
() .
SQL-
.
4. SQL ,
SQL. (
Oracle, MS SQL Server, Interbase, MySQL
FoxPro, Access, ...
Standardul SQL
Modelul relaional de date a lui E.Codd
Teoria mulimelor. Algebra relaional i calculul relaional
Fig. 1.3. SQL- .
)
Pe ziua de azi exist mai multe realizri comerciale a limbajului SQL (Transact SQL
sau T-SQL n MS SQL Server, PL/SQL n Oracle, pgPLSQL n PostgreSQL, etc.).
De aici mai departe noi nu ne vom preocupa de studierea limbajului SQL propriu zis,
ci vom da o iniiere n standardul limbajului SQL, oprindu-se mai concret la
mijloacele de creare, actualizare a bazelor relaionale de date i prelucrarea
datelor din ele, prevzute de standardul SQL.
3.3. Obiectele de structur a bazelor de date susinute de SQL
27
Structura logic a bazei de date n cadrul unui SGBD concret este constituit dintr-un
set de entiti numite obiecte precum i legturi dintre acesteea. De nu confundat
obiectele de structur a bazei de date cu obiectele din domeniul concret al lumii
reale.
3.3.1. Obiectele bazei de date conform standardului SQL. Noiune de obiect
Obiectele bazei de date prezint elemente de baz care constituie structura bazei de
date. Aceste obiecte reprezint uniti logic integre care se folosesc pentru
memorarea informaiei sau pentru referirea altor obiecte de memorare a informaiei.
,
,
.
Deci:
Obiectul bazei de date este o entitate integr definit prin mojloacele limbajului i
care se folosete pentru memorarea informaiei sau pentru referirea altor obiecte
de memorare a informaiei.
: , ,
, , , , , .
, , , ,
CREATE.
Obiectele bazei de date prevzute de standardul SQL sau folosite de diferite realizri
a limbajului SQL:
1. Tabele, coloane, restricii (TABLE, COLUMN, CONSTRAINT). Tabelele
constituie mecanismul principal de stocare a datelor specific unei baze de date.
TABLE () ;
COLUMN coloane. Caracteristicele unei coloane se refer la tipul de date
memorate n coloan i lungimea coloanei;
CONSTRAINT restricii (constrngeri). Sunt de tip PRIMARY KEY,
FOREGN KEY, UNIQUE, NOT NULL, DEFAULT.
2. Tabele virtuale VIEW viziuni. S definesc prin tabele de baz sau alte viewuri. S stocheaz numai definiia view-ului.
(relaii virtuale, tabele calculate n memoria RAM).
28
SQL-,
.
29
, ,
, , ,
.
SQL Server .
SQL Server , 2.4.
2.4.
Tables
Views
( )
Stored Procedures
Triggers
User Defined
function
Indexes
Constraints
Users
Roles
Rules
Defaults
SQL , .
- , ,
. ,
. SQL ,
:
c; ( )
() ;
c; ()
. .
, .
30
() ,
. ,
.
, ,
, . ,
,
.
SQL,
. .
,
, .
,
. -
.
,
.
, .
.
.
,
.
,
,
; ,
, NULL.
,
( ).
, .
: NULL,
, ( ),
31
.
.
,
.
, .
.
, ,
,
.
32
DML (
):
INSERT
UPDATE
DELETE
DQL ( ,
):
SELECT
Numai una singur dar foarte puternic comand. Categoriile DML i DQL ca de
obicei se unesc n una singur cu denumire DML
DCL (comenzile de protecie i gestiune a datelor
crearea i eliminarea obiectelor, care determin (regleaz) drepturile de acces la
baza de date, precum i acordarea privilegiilor de niveluri cuvenite pentru utilizatori:
CREATE/ALTER/DROP PASSWORD
GRANT (acordarea privilegiilor de acces);
REVOKE () (anularea
(revocarea, abrogarea) privilegiilor);
DENY (?)
:
START AUDIT revizia conturilor;
STOP AUDIT
:
SET TRANZACTION a stabili tranzacia;
COMMIT a salva fizic modificrile prevzute de tranzacie;
ROLLBACK a abandona modificrile prevzute de tranzacie, a derula napoi
la starea care era nainte de tranzacie;
SAVEPOINT a stabili puncte de derulare napoi n interiorul tranzaciei.
Noiuni de field cmp/coloan, record nregistrare, cheie primare, cheie
alternativ, cheie extern.
Valoarea de tip NULL un marcer.
33
(fiier de date),
(fiier de jurnalizare). ,
, , (vederi VIEW), (triggere)
(proceduri stocate). : (primare)
(secundare).
(registre de tranzacii). ,
, ,
.
; ..,
( ).
, :
Fiiere primare de date. .
. , .
, ,
34
. .
.mdf.
Fiiere secundare de date. .
. ,
.
( ).
, .
,
. ( RAID- ,
). .ndf.
Fiiere jurnal (fiierele de jurnalizare, fiierele registrelor de tranzacii).
.
, (restabilirea, refacerea)
. ,
.
.ldf.
. SQL Server 32
4 .
, ,
.
,
(registru de jurnalizare).
O baz de date compus conine mai multe fiiere de date i unul sai mai multe
fiiere de registre de jurnalizare. n acest caz, reieind din anumite considerente,
fiierele se unesc n grupuri.
?
.
,
, ,
, ,
.
, ,
. , ,
, (,
10 ), , ,
, , (,
4 ). , ,
, ,
-. RAID
, . ,
,
.
( ),
.
36
, SQL Server
.
, ,
. ( . 32.)
,
.
SQL Server:
.
.
.
-.
.
, ,
. ,
.
,
, .
, :
,
.
, . -
, , ,
,
, -.
, ,
(. 5).
,
,
.
,
-
.
,
.
- .
, ,
,
- .
37
,
RAID .
, ,
,
-,
.
38
, , .
, , , ,
, , .
,
.
master. , SQL
Server SQL Server.
,
. master .
tempdb. .
,
SQL Server, . SQL
Server tempdb. , ,
.
, ,
ALTER DATABASE.
model. () ,
, tempdb.
model,
. model ,
tempdb
SQL Server. model,
( ) , ..
model,
.
msdb. , SQL Server Agent
( ,
).
, .
. ,
SQL Server.
39
MS SQL Server
SQL Server :
Create Database Wizard,
SQL Server Enterprise Manager
CREATE DATABASE,
.
, . ,
Create Database Wizard . ,
, .
( , ).
,
, , , .
,
. - Create Database Wizard
,
40
. ( ,
, .)
Enterprise Manager T-SQL ,
,
, ,
, ,
.
SQL- :
, .
, *.mdf (
) *.ldf. ( ).
(, , ..),
( ,
).
SQL- CREATE DATABASE.
, SQL-
.
<__> ::=
CREATE DATABASE __
[ON [PRIMARY]
[ <_> [,...n] ]
[,<_> [,...n] ] ]
[ LOG ON {<_>[,...n] } ]
[ FOR LOAD | FOR ATTACH ]
.
.
, (
).
128 .
,
, , .
,
*.ndf.
(PRIMARY) ,
. , SQL-,
.
ON ,
.
41
PRIMARY . ,
.
LOG ON
.
, _log.
,
. :
<_>::=
([ NAME=__,]
FILENAME='__'
[,SIZE=_ ]
[,MAXSIZE={max__ |UNLIMITED } ]
[, FILEGROWTH=_ ] )[,...n]
(denumirea logic a fiierului) ,
SQL-.
(denumirea fizic a fiierului)
,
. .
SIZE ;
512 , , 1 .
MAXSIZE .
UNLIMITED
.
( FILEGROWTH)
.
:
<_>::=FILEGROUP __
<_>[,...n]
3.1. , C,
C.
CREATE DATABASE Archive
ON PRIMARY ( NAME=Arch1,
FILENAME=c:\user\data\archdat1.mdf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch2,
FILENAME=c:\user\data\archdat2.mdf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Arch3,
42
FILENAME=c:\user\data\archdat3.mdf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20)
LOG ON
(NAME=Archlog1,
FILENAME=c:\user\data\archlog1.ldf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Archlog2,
FILENAME=c:\user\data\archlog2.ldf,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20)
3.1. .
,
C, E.
,
, -
. , ,
.mdf, .ndf, .ldf. SIZE (), MAXSIZE
( ) FILEGROWTH ( )
( ).
. CREATE DATABASE
Books Online, "Create Database" ( ).
RAID-. "",
,
, RAID. ,
. .
Sales :
, Sales_root.mdf;
customer_data1.ndf, customer_data2.ndf
customer_data3.ndf, customers_group;
product_data1.ndf product_data2.ndf,
products_group;
, log_data1.ldf.
, Sales (Vinzari).
, CREATE DATABASE
FILEGROUP.
CREATE DATABASE Sales
ON PRIMARY
--
-- ( )
(NAME = Sales_root,
--
FILENAME = 'c:\mssql2k\MSSQL\data\salesroot.mdf',
SIZE = 8MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP customers_group
--
(NAME = customerdata1,
--
FILENAME = 'd:\mssql2k\MSSQL\data\customerdata1.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
(NAME = customerdata2,
--
FILENAME = 'e:\mssql2k\MSSQL\data\customerdata2.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
(NAME = customerdata3,
--
FILENAME = 'f:\mssql2k\MSSQL\data\customerdata3.ndf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 100MB),
FILEGROUP products_group
--
(NAME = productdata1,
--
FILENAME = 'g:\mssql2k\MSSQL\data\productdata1.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB),
(NAME = productdata2,
--
FILENAME = 'h:\mssql2k\MSSQL\data\productdata2.ndf',
SIZE = 500MB,
MAXSIZE = 700MB,
FILEGROWTH = 100MB)
44
LOG ON
(NAME = logdata1,
--
FILENAME = 'i:\log_files\logdata1.ldf',
SIZE = 800MB,
MAXSIZE = 1000MB,
FILEGROWTH = 200MB)
,
. , ..
, .
, customers_group products_group,
. ,
, ,
LOG ON.
.
,
. , ,
customers_group ,
customer_data1.ndf, customer_data2.ndf customer_data3.ndf.
,
,
- (
).
, SQL Server ,
FILEGROWTH=0,
. ,
, .. , .
MAXSIZE,
SIZE.
4.4.
:
<__> ::=
ALTER DATABASE __
{ ADD FILE <_>[,...n]
[TO FILEGROUP __ ]
| ADD LOG FILE <_>[,...n]
| REMOVE FILE __
| ADD FILEGROUP __
| REMOVE FILEGROUP __
| MODIFY FILE <_>
| MODIFY FILEGROUP __
<__>}
,
.
, .
45
(ADD) (
, ) .
(MODIFY).
REMOVE.
.
.
:
READONLY ; READWRITE
; DEFAULT .
refacerea bazelor de date, etc. Dintre aceste programe, unele pot fi executate la nivel
de linie de comanda (osql, isql), iar altele prezinta interfata grafica si sunt mai usor
de folosit (SQL Server Enterprise Manager, SQL Query Analizer).
5.3 Utilizarea programului Enterprise Manager (SQL Server 2000 ???)
Programul utilitar Enterprise Manager se lanseaz selectnd Start->Programs>Microsoft SQL Server->Enterprise Manager. Acest program este foarte puternic i
permite att administrarea sistemului (crearea utilizatorilor, refacerea bazelor de date,
etc.) ct i proiectarea bazelor de date (crearea bazelor de date i a tabelelor,
asocierea ntre tabele, etc.). n continuare vor fi prezentate numai noiunile strict
necesare pentru a ncepe lucrul cu SQL Server, restul informaiilor sunt destul de
uor de gasit n manualul Books Online al sistemului SQL Server.
Lansarea programului Enterprise Manager se poate face att de pe statia pe care a
fost instalat serverul, ct si de pe orice statie pe care s-a instalat un client.
Pentru statia serverului se poate nregistra serverul local (al carui nume este, de
regula, numele calculatorului pe care este instalat, de exemplu Server125a, n
laborator) pentru contul (login) de administrare (sa), creeat implicit la instalare.
Acest cont are toate drepturile, att la nivelul sistemului (adminstrare, securitate, etc)
ct si la nivelul fiecarei baze de date. De regula, noii utilizatori se creeaza din contul
sa si acestora li se acorda mai putine drepturi, attea cte sunt necesare pentru ca sa
realizeze sarcinile dorite, fara sa afecteze administrarea sistemului de gestiune, care
trebuie sa ramna numai n atributiile administratorului (contul sa).
n panoul din stnga al ferestrei Enterprise Manager, elementul Console Root
reprezinta radacina unui arbore care contine n primul nivel toate instalarile SQL
Server disponibile n reteaua respectiva, organizate n mai multe grupuri de servere.
Initial n grupul implicit SQL Server Group nu exista nici un server nregistrat si
nregistrarea se face cu comanda New SQL Server Registration selectata din meniul
de context care se deschide la apasarea butonului dreapta al mouse-ului atunci cnd
este selectat directorul SQL Server Group.
Dupa nregistrare, se poate rula Enterprise Manager cu conectare pe contul sa n mod
de autentificare Windows. n acest mod este bine sa fie stabilita (sau modificata)
parola contului sa si sa fie editata nregistrarea serverului cu comanda Edit SQL
Server Registratuion Properties din meniul de context care se deschide la apasarea
butonului dreapta al mouse-ului atunci cnd este selectat numle instantei serverului
(n laborator, Server125a). n fereastra care se deschide (cu titlul Registered SQL
Server Properies) se selecteaza optiunile Use SQL Server Authentication si Always
48
50
Exemple:
EXEC
EXEC xp_logininfo BUILTIN\Administrators, members - Afieaz lista de membrii din grupul Windows
6.3.
6.4.
52
(identificatorii) SQL
, ,
. ,
SQL, .
SQL (iruri de caractere, litere),
, (A-Z, a-z),
(0-9) (_).
:
128 ;
(liter);
(spaii).
<>::=<>
{<>|<>}[...n]
. SQL
, SQL-
.
, SQL, .
, - ().
, .
, .
.
1.1.
(notaie)
::=
<>
(necesitatea
alegerii ..., alternativa alegerii din mai multe elemente)
{}
(construcie obligatorie)
[]
[,n]
(caracterial)
CHAR | VARCHAR
(binar)
(date binare)
54
, ..
(),
0, 1. :
<_>::=
BIT [VARYING][]
(date calendaristice)
"/"
. SQL :
55
<_/>::=
{DATE | TIME[][WITH TIME ZONE]|
TIMESTAMP[][WITH TIME ZONE]}
DATE , YEAR
(), MONTH () DAY (). TIME ,
HOUR (), MINUTE () SECOND ().
TIMESTAMP .
,
SECOND. ,
TIME (.. ),
TIMESTAMP 6 (..
). WITH TIME ZONE
TIMEZONE HOUR TIMEZONE MINUTE,
( ).
INTERVAL .
(noiune de domen)
.
,
,
,
. ,
.
SQL :
<_>::=
CREATE DOMAIN _ [AS]
_
[ DEFAULT ]
[ CHECK (_)]
, ,
. ,
.
.
:
DROP DOMAIN _ [ RESTRICT |
CASCADE]
CASCADE ,
,
, .
SQL Server .
56
binary
char
timestamp
nvarchar
nchar
sysname
SQL Server.
57
,
, , ,
.
. .
(Transact-SQL);
, char, varchar, text, nchar,
nvarchar ntext. .
(Transact-SQL);
, ,
. . ,
(Transact-SQL).
SQL Server 2005
SQL-92. . (Transact-SQL).
SQL Server 2005 .
, SQL Server 2005
:
: varchar(max), nvarchar(max) varbinary(max);
: text, ntext, image, varchar(max), nvarchar(max),
varbinary(max) xml.
.
sp_help -1
xml.
bigint
int
smallint
tinyint
bit
decimal
numeric
money
smallmoney
float real
58
datetime smalldatetime
char
text
varchar
nchar
ntext
nvarchar
binary
image
varbinary
cursor
timestamp
sql_variant uniqueidentifier
table
xml
.
CLR
59
SQL Server 2005
http://sqlserver.ro/forums/thread/428.aspx
Doua instante xml nu pot fi comparate direct (insa poate fi convertit la un alt tip de
date ca de exemplu varchar pentru a putea fi comparate). Din acest motiv nu putem
defini o cheie primara sau unica pe o coloana de tip xml, nu putem defini o
constrangere clasica sau folosi un index clasic pentru acest tip de date.
Pentru a interoga eficient tipul de date xml se foloseste limbajul integrat XQUERY si
se pot defini indecsi XML (diferiti de cei clasici permitand o interogare eficienta in
cadrul unei instante si nu a unui set).
Pentru modificarea datelor se foloseste instructiunea modify - o extensie a limbajului
XQUERY.
60
Observatii:
desi se pot stoca fragmente de documente xml acestea trebuie sa fie bine
formate
se pot defini constrangeri pe o coloana tip xml folosind functii
se poate defini un index full-text pe o coloana tip xml
se pot asocia o valoare implicita pentru o coloana de tip xml
Cristian Andrei Lefter, SQL Server MVP
MCT, MCSA, MCDBA, MCAD, MCSD .NET,
MCTS, MCITP - Database Administrator SQL Server 2005
http://sqlserver.ro
61
Date calendaristice
,
DATETIME SMALLDATETIME, 8 4
.
MONEY SMALLMONEY
; 4 8 4
.
BIT , 0 1.
62
Craearea tipurilor definite de utilizator
SQL- .
-
.
(procedur de sistem sp_addtype):
sp_addtype [@typename=]type,[@phystype=]
system_data_type
[,[@nulltype=]null_type]
system_data_type .
image
text
uniqueidentifier
smallint
int
2.3.
smalldatetime decimal
real
decimal[(p[,s])]
datetime
numeric
float
numeric[(p[,s])]
float(n)
varbinary(n)
bit
binary(n)
char(n)
nvarchar(n)
ntext
nchar(n)
varchar(n)
2.1. bir.
sp_droptype type: EXEC sp_droptype 'bir'
63
, ,
systypes:
SELECT * FROM
systypes
Convertirea tipurilor de date
.
,
STR.
SQL Server CONVERT CAST,
,
. CONVERT CAST
.
CAST( AS _)
CONVERT(_[()],
[,])
: /, .
DECLARE @d DATETIME
DECLARE @s CHAR(8)
SET @s=29.10.01
SET @d=CAST(@s AS DATETIME)
2.3. /.
SQL
MS SQL Server , , , .
5.2.4. Expresii
, ,
, .
, .
64
( ) ( ,
). ,
, , , .
(operatori)
.
(operatori unari), (operatori de setare, asignare),
(aritmetici), (literari),
(de comparaie), (logici), (binari).
Variabile
SQL Server .
.
- , .
DECLARE, :
DECLARE {@_ _ }
[,...n]
SET SELECT.
SELECT ,
.
DECLARE @a INT
SET @a=10
2.4. SET .
DECLARE @k INT
SELECT @k=SUM() FROM
2.5. SELECT .
5.2.5. SQL
Structuri de control n SQL (instruciuni de control)
SQL , SQL Server
(structuri de control),
.
(bloc
BEGIN END:
de operatori)
<_>::=
BEGIN
{ sql_ | _ }
END
65
SQL .
(construcii
de ramificri polivariante), (ramificri condiionate)
(bucle). BEGIN...END .
SQL (
, ,
), BEGIN...END
.
. :
<_>::=
IF _
{ sql_ | _ }
[ ELSE
{sql_ | _ } ]
:
<_>::=
WHILE _
{ sql_ | _ }
[ BREAK ]
{ sql_ | _ }
[ CONTINUE ]
, BREAK.
, ,
CONTINUE.
:
<__>::=
CASE _
WHEN {__ |
_ } THEN
_ [,...n]
[ ELSE __ ]
END
,
.
WHEN...THEN, ,
ELSE.
66
6. Crearea tabelelor
6.1.
,
, .
(tabel de baz)
. (linii) (coloane),
.
(cmp), ,
, .
. (nregistrare, record)
, ,
.
, :
?
() ?
?
?
?
?
?
?
:
<_> ::=
CREATE TABLE _
(_ _
[NULL | NOT NULL ] [,...n])
MS
SQL Server.
, . ,
.
NULL ,
NULL. NULL
, , ,
. NOT NULL,
NULL . NULL,
NULL . SQL
NULL.
67
Opiunea <option> poate fi: NO ACTION, CASCADE, SET DEFAULT sau SET
NULL. Opiunea NO ACTION este identic strategiei RESTRICTED analizat n
teorie.
Restricii la date (reguli de validare, definiie condiii de control):
NOT NULL
DEFAULT
CHECK
Exemple:
DEFAULT (FurnDate = GetDate()),
DEFAULT (City = Chiinu),
CHECK (Colors in (white, black, red, green))
CHECK (WareType in (unu, doi, trei));
6.3. Crearea tabelei n baza altor tabele, folosind propoziia SELECT
CREATE TABEL DeliveryNew AS
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
n mod identic se creaz tabelele virtuale View:
CREATE VIEW Delivery AS
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId
Wares.WareId);
Delivery.Supplier)
AND
(Delivery.Ware
.
CREATE TABLE SELECT
:
69
70
71
MONEY NOT
NULL,
VARCHAR(50),
VARCHAR(50))
3.2. ,
.
3.3.
, , ,
.
CREATE TABLE
(
VARCHAR(50) NOT NULL,
VARCHAR(50),
VARCHAR(50),
3.3. .
Modificarea tabelelor
72
ALTER TABLE, :
ALTER TABLE _
{[ADD [COLUMN] _ _ [
NULL | NOT NULL ]]
| [DROP [COLUMN] _]}
MS SQL Server :
ALTER TABLE _
{[ALTER COLUMN _
{__ [([,])]
[ NULL | NOT NULL ]}]
| ADD { [_ _]
| _ AS } [,...n]
| DROP {COLUMN _}[,...n]
}
, .
:
,
NOT NULL. ,
,
NOT NULL
.
. :
, NULL (..
- );
- ;
,
, , NOT NULL.
,
;
,
;
;
,
,
;
73
;
, , .
ALTER TABLE. ,
. ,
. .
, ,
.
, .
3.4. .
ALTER TABLE ADD _ CHAR(20)
3.4. .
Eliminarea tabelelor
: ,
:
DROP TABLE _ [RESTRICT | CASCADE]
, ,
. ,
, DELETE.
DROP TABLE ,
. RESTRICT,
,
, DROP TABLE .
CASCADE, ,
, ,
. DROP TABLE
CASCADE ,
.
DROP TABLE ,
. ,
DROP TABLE ,
.
74
Delivery.Supplier)
AND
(Delivery.Ware
75
SELECT
INSERT
UPDATE
DELETE
Manipularea necesit n primul rnd regsirea datelor. Pentru regsire trebuie de
specificat denumirea tabelelor, lista cmpurilor i condiia de selecie a nregistrrilor
n care se afl datele cerute. Tabelele i cmpurile n operaiile de regsire se
specific implicit (necondiionat). nregistrrile se specific prin opiunea WHERE
<predicat>, care este o parte component a operatorilor de manipulare. Opiunea
<predicat> este o expresie logic care descrie condiia de selecie a nregistrrilor.
Ct pentru consultarea datelor propriu zis, att i pentru regsirea lor cu scopul
modificrii frecvent se folosete varianta simpl a operatorului SELECT.
Sintaxa general ( )
n limb natural ():
SELECT < , >
FROM < , >
[WHERE <, >];
n mod formal ():
SELECT <* | field_name1, field_name2, ..., field_nameN>
76
77
Exemplu
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
ORDER BY 2, 4;
Operatorul SELECT are o mulime de opiuni cu ajutorul crora pot fi ndeplinite
urmtoarele operaii:
Selectarea datelor,
Prelucrarea datelor,
Formatarea datelor.
El este folosit i in legtur cu operatorii CREATE, INSERT, UPDATE, DELETE.
5.1.2. Introducerea datelor n tabele
nserarea datelor:
INSERT INTO <_._>
VALUES ( 1, 2, , [NULL], );
INSERT INTO <_._>
(1, 2, )
VALUES (1, 2, );
nserarea datelor extrase din alt tabel:
INSERT INTO <_._>
[(1, 2, )]
SELECT [ * | (1, 2, )]
FROM <_._>
[WHERE < >];
78
79
UPDATE <_._>
SET <_ = >
[WHERE <>];
UPDATE Delivery
SET Volume = 5
WHERE OrdNum = 109;
80
1 record updated
UPDATE Delivery
SET Volume = 5;
109 records updated
nnoirea datelor n mai multe cmpuri:
UPDATE <_._>
SET <C1 = 1>
[, 2 = 2,
3 = 3, ]
[WHERE <>];
UPDATE Delivery
SET Supplier = BEL007,
Price = 2599.99
WHERE Ware = TEL072;
7 records updated
5.1.4. tergerea datelor din tabele
DELETE FROM < , >
81
82
4.6. Indeci
,
.
. ,
, .
( ) ,
.
.
, .
Indexul este o list de referine la nregistrrile tabelului dat ordonat dup un cmp
anumit, numit cmp indexat.
,
, .
,
. SQL,
:
CREATE [ UNIQUE ] INDEX _
ON _(_[ASC|DESC][,...n])
.
, .
UNIQUE,
.
, (,
). ,
,
. ,
( , )
.
.
,
DROP INDEX _
83
84
O tabel poate conine doar un index clustered i pn la 249 de indeci non-clustered. Principalul
motiv pentru care se utilizeaz un index este acela de a se putea accesa mai rapid datele pe care o
interogare ncearc s le acceseze. Acest index poate s fie att clustered ct i non-clustered. Fr
un index, SQL Server ar trebui s parcurg ntreaga tabel pn ajunge la rndul care trebuie
accesat sau chiar s parcurg ntreaga tabel. Acest lucru se poate evidenia cu ajutorul planului de
interogare (execution plan) care va utiliza Index Seek (dac exist index) sau Table Scan (dac nu
exist).
Ca metod de practic ar fi s utilizez index clustered dar numai acolo unde indexul este o coloan
ce conine date, totui sunt limitat la un singur astfel de index n fiecare tabel. O a doua metod ar
fi indexarea tuturor coloanelor dar ar conduce la supraindexare i ar fi greu de ntreinut toi indeci
mai ales cnd se lucreaz cu multe instruciuni de actualizare (insert, update, delete).
Ca sfat, se poate spune c este mai bine s se creeze index non-clustered acolo unde coloana intr
n setul de rezultate pentru c accesarea paginilor de date este mai nceat.
Ca instrumente de depistare a cazurilor n care indexarea nu este corespunztoare (prea puin
indexat sau supraindexat), se poate utiliza Database engine Tuning Advisor
Etichete: SQL Server, Index, Clustered, Nonclustered, DBA
MS SQL Server
,
.
, ,
. -
.
SQL,
. SQL Server
.
, (
, ,
).
.
B-
.
, ,
.
.
,
, ..
, , .
SQL Server :
85
;
;
.
, ;
;
;
.
4-5 .
Index clasterizat
,
.
, .
, .
.
.
, ,
.
.
,
.
, .
.
.
.
.
,
86
, ,
. .
(PRIMARY KEY)
,
.
,
,
, ,
,
.
Index unic
.
,
.
, .
.
,
.
UNIQUE PRIMARY KEY,
.
. ,
.
SQL :
;
UNIQUE;
CREATE INDEX.
:
<_>::=
CREATE [ UNIQUE ]
[ CLUSTERED | NONCLUSTERED ]
INDEX _ ON _(_
[ASC|DESC][,...n])
[WITH [PAD_INDEX]
[[,] FILLFACTOR=_]
[[,] IGNORE_DUP_KEY]
[[,] DROP_EXISTING]
[[,] STATISTICS_NORECOMPUTE] ]
87
[ON __ ]
.
,
.
UNIQUE
.
. NULL,
, .
, INSERT UPDATE,
.
CLUSTERED
,
,
.
.
NONCLASTERED .
FILLFACTOR
SQL-. FILLFACTOR
.
FILLFACTOR.
PAD_INDEX
FILLFACTOR.
DROP_EXISTING
,
.
STATISTICS_NORECOMPUTE
.
__ ,
.
/ .
DROP INDEX '_'[,...n]
3.5.
.
88
3.6.
. ,
.
30%.
CREATE UNIQUE NONCLUSTERED INDEX index_klient2
ON ( DESC, DESC)
WITH FILLFACTOR=30,
STATISTICS_NORECOMPUTE
ON PRIMARY
3.6. .
7. INTEROGAREA DATELOR
SELECT *
FROM Delivery
WHERE Volume > 20 AND Price > 2999.00;
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
( ORDER BY)
SELECT <* | field_name1, field_name2, ..., field_nameN>
FROM <table_name1, table_name1, ..., table_nameN>
[WHERE <condition>];
ORDER BY < field_name1', field_name2', ...>
, ,
.
90
SELECT Delivery.OrdNum, Supplier.SupplName, Wares.WareName,
Delivery.Volume, Delivery.Price
FROM Supplier, Delivery, Wares
WHERE (Supplier.SupplId = Delivery.Supplier) AND (Delivery.Ware =
Wares.WareId);
ORDER BY 2, 4;
SELECT
, :
SELECT, FROM, WHERE, ODER BY. .
PROD_DESCR
11235
11235
222
90
1234
15
13
13
119
455
COST
7.75
6.20
12.50
59.99
8.27
29.99
6.87
7.35
35.40
14.30
8 records selected.
SELECT PROD_ID
FROM PRODUCTS_TBL;
91
SELECT *
FROM PRODUCTS_TBL
WHERE COST > 20 AND COST < 40;
SELECT *
FROM PRODUCTS_TBL
WHERE COST < 20 AND COST > 40;
SELECT *
FROM PRODUCTS_TBL
WHERE PROD_ID =11235 AND PROD_ID =13;
92
SELECT *
FROM PRODUCTS_TBL
WHERE PROD_ID <>11235 AND PROD_ID <>13;
SELECT *
FROM PRODUCTS_TBL
WHERE PROD_ID !=11235 AND PROD_ID !=13;
SELECT *
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_ID DESC;
SELECT *
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_ID DESC;
SELECT PROD_ID, PROD_DESCR, COST
FROM PRODUCTS_TBL
WHERE COST < 20
ORDER BY PROD_ID DESC;
93
SALARY_TBL
LAST_NAME
FIRST_NAME
SALARY
670
375
670
430
670
( COUNT(*))
95
(operaii de comparaie)
SQL
=, <, >, <>, <=, >=.
<=, >= ,
.
EXISTS
UNIQUE
ALL
ANY
IS NULL NULL.
SELECT *
FROM EMPLOYEE_TBL
WHERE PAGER IS NULL;
( WHERE PAGER = NULL !)
96
BETWEEN , ,
( ).
SELECT *
FROM PRODUCTS_TBL
WHERE COST BETWEEN 10.0 AND 29.99;
IN .
WHERE SALARY IN (20000, 30000, 40000).
LIKE , .
% _.
WHERE SALARY LIKE 200%;
WHERE SALARY LIKE %200%;
WHERE SALARY LIKE _00%;
WHERE SALARY LIKE 2_%_%;
WHERE SALARY LIKE %2;
WHERE SALARY LIKE _2%3%;
WHERE SALARY LIKE 2___3%;
EXISTS, UNIQUE, ALL ANY .
, .
EXISTS, UNIQUE, ALL ANY.
EXISTS , .
( )
SELECT COST
FROM PRODUCTS_TBL
WHERE EXISTS (SELECT COST
FROM PRODUCTS_TBL
WHERE COST > 100);
UNIQUE (..
).
SELECT *
FROM SALARY_TBL
WHERE UNIQUE (SELECT SALARY
FROM SALARY_TBL
WHERE LAST_NAME = );
ALL
.
97
ANY
.
SELECT *
FROM PRODUCTS_TBL
WHERE COST > ALL ( SELECT COST
FROM PRODUCTS_TBL
WHERE COST < 10);
SELECT *
FROM PRODUCTS_TBL
WHERE COST > ANY ( SELECT COST
FROM PRODUCTS_TBL
WHERE COST < 10);
NOT BETWEEN
NOT IN
NOT LIKE
IS NOT NULL
NOT EXISTS
NOT UNIQUE
98
WHERE SALARY <>20000;
WHERE SALARY != 20000;
WHERE COST NOT BETWEEN 5.95 AND 14.5;
WHERE PROD_ID NOT IN (13, 9, 87, 119);
WHERE SALARY NOT LIKE 200%;
WHERE SALARY NOT LIKE %200%;
WHERE SALARY NOT LIKE _00%;
WHERE SALARY NOT LIKE 2_%_%;
WHERE PAGER IS NOT NULL;
WHERE NOT EXISTS (SELECT EMP_ID
FROM EMPLOYEE_TBL
WHERE EMP_ID = 333333;
WHERE NOT UNIQUE (SELECT SALARY
FROM EMPLOYEE_TBL);
(operaii aritmetice)
: + (), - (), * (), / ().
.
()
NOT
/
AND
()
Shl
shr
+
OR
=
<
XOR
<>
>
IN
100
Formatul funciilor
COUNT (*) | [([DISTINCT | ALL] <_>)];
Contorizeaz valorile nenule ale unei coloane sau numrul de linii dintr-un tabel
DISTINCT ().
,
ALL , NULL,
(*) .
SELECT COUNT(DISTINCT(PROD_ID))
FROM ORDERS_TBL;
SELECT SUM(SALARY)
FROM EMPLOYEE_TBL;
SELECT SUM(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
SELECT AVG(SALARY)
FROM EMPLOYEE_TBL;
SELECT AVG(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
SUM, AVG .
COUNT, SUM, AVG DISTINCT
,
.
SELECT MAX(SALARY)
FROM EMPLOYEE_TBL;
SELECT MAX(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
SELECT MIN(SALARY)
FROM EMPLOYEE_TBL;
SELECT MIN(DISTINCT SALARY)
FROM EMPLOYEE_TBL;
MAX, MIN DISTINCT ,
.
SELECT COUNT (ORD_NUM), SUM(QTY),
SUM(QTY) / COUNT(ORD_NUM) AVEREGE_QUOLITY
FROM ORDERS_TBL;
HAVING
Gruparea datelor unirea datelor cu valori egale a unui atribut n grupe i calcularea
funciilor de totalizare pe acestea grupe.
.
(gruparea datelor se realizeaz)
GROUP BY SELECT. GROUP BY
, (pentru a uni valori repetate n
grupuri). WHERE
ORDER BY (opiunea trebuie s fie dup WHERE i nainte de ORDER BY).
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
Sintaxa
SELECT 1, 2,
FROM 1, 1,
WHERE <predicat>
GROUP BY 1, 2,
HAVING <conditie>
ORDER BY 1, 2,
n opiunea GROUP BY pot fi folosite numai cmpuri selectate n opiunea SELECT.
Dac cmpul este n lista SELECT atunci el trebuie s fie i n GROUP BY. Aceast
condiie nu se refer la cmpurile aflate n expresiile de totalizare a opiunii SELECT.
GROUP BY
SELECT . , ,
GROUP BY ,
.
103
Furnizori
FurnId
FurnNume
FurnOras
1
Facture
FactId
DataEliber
Furnizor
SumaTotala
Depozit
Livrari
OrdNum
Factura
Marfa
Cantitate
Pret
Marfuri
MarfaId
MarfaNume
UnitateMasura
104
, GROUP BY ORDER BY
, GROUP BY
, ORDER BY
.
ORDER BY GROUP BY
.
Opiunea HAVING
HAVING
SELECT 1, 2,
FROM 1, 1,
WHERE <>
GROUP BY 1, 2,
105
HAVING <>
ORDER BY 1, 2,
( )
SQL
, , .
:
,
ANSI: CONCATENATION, SUBSTRING,
TRANSLATE, REPLACE, UPPER, LOWER;
, SQL.
.
(substring) , , ..
.
.
ANSI
SQL .
Oracle I I . SQL Server +.
SELECT I I ,
SELECT + .
:
Oracle
SELECT _ I I [ I I ] _ [ I I _];
SQL Server
SELECT _ + [ + ] _ [ + _].
106
( )
TRANSLATE
TRANSLATE
. ?
TRANSLATE !
:
SELECT TRANSLATE(_, 1, 2)
_ ,
1 ,
2 , ,
.
_
.
:
SELECT TRANSLATE(CITY, IND, ABC)
FROM EMPLOYEE_TBL;
SELECT CITY, TRANSLATE(CITY, IND, ABC) NEWSITY
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
.
NEWCITY
GREEBWOOC
ABCAABAPOLAS
WHATELABC
ABCAABAPOLAS
ABCAABAPOLAS
ABCAABAPOLAS
107
REPLACE
.
:
SELECT REPLACE(_, 1, [NULL] 2)
:
SELECT REPLACE(TELEPHONE, PHONE, VIZION)
SELECT CITY, REPLACE(CITY, IND, ABC) NEWSITY
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
.
NEWCITY
GREENWOOD
ABCIANAPOLIS
WHITELAND
ABCIANAPOLIS
ABCIANAPOLIS
ABCIANAPOLIS
UPPER
.
:
UPPER(_)
:
SELECT CITY, UPPER(CITY) NEWSITY
FROM EMPLOYEE_TBL;
CITY
GReenwOOD
INDIAnaPOLIS
WHitelanD
INdianapolis
INdianaPOLIS
INDIANapolIS
.
NEWCITY
GREENWOOD
ABCIANAPOLIS
WHITELAND
ABCIANAPOLIS
ABCIANAPOLIS
ABCIANAPOLIS
LOWER
.
:
LOWER(_)
:
SELECT CITY, LOWER(CITY) NEWSITY
108
FROM EMPLOYEE_TBL;
CITY
GReenwOOD
INDIAnaPOLIS
WHitelanD
INdianapolis
INdianaPOLIS
INDIANapolIS
.
NEWCITY
greenwood
abcianapolis
whiteland
abcianapolis
abcianapolis
abcianapolis
SUBSTR (SUBSTRING)
. SQL,
( Oracle SUBSTR, SQL Server - SUBSTRING).
:
SUBSTR(_, _, ); (Oracle)
SUBSTRING(_, _, ); (SQL Server)
:
Oracle
SELECT CITY, SUBSTR(CITY,3,5) NEWSITY
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
6 rowes affected.
NEWCITY
EENWO
DIANA
ITELA
DIANA
DIANA
DIANA
SQL Server
SELECT CITY, SUBSTRING(CITY,8,3) NEWSITY
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
6 rowes selected.
NEWCITY
OD
POLI
ND
POLI
POLI
POLI
.
LTRIM
109
.
. LEFT.
:
LTRIM(_ [, _]);
:
SELECT CITY, LTRIM(CITY, INDIA) NEWSITY
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.
NEWCITY
GREENWOOD
NAPOLIS
WHITELAND
NAPOLIS
NAPOLIS
SBRUC
LLINOIS
RTRIM
.
. RIGHT.
:
RTRIM(_ [, _]);
:
SELECT CITY, RTRIM(CITY, IS) NEWSITY
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.
NEWCITY
GREENWOOD
INDIANAPOL
WHITELAND
INDIANAPOL
INDIANAPOL
INSBRUC
ILLINO
INSTR
,
.
110
:
INSTR(_, _
[, ]]);
:
SELECT CITY, INSTR(CITY,DIA,1,1) NR_POZ
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INDIANAPOLIS
6 rowes selected.
NR_POZ
0
3
0
3
3
3
DECODE
ANSI ,
. SQL Base, Oracle .
,
.
:
DECODE(_, 1, 1
2 [, ]]);
[,
2,
:
SELECT CITY, DECODE (CITY, INDIANAPOLIS, INDY, GREENWOOD, GREEN,
OTHER) SHORT_NAME FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.
SHORT_NAME
GREEN
INDY
OTHER
INDY
INDY
OTHER
OTHER
SQL.
( LENGTH)
111
:
LENGTH(_);
:
SELECT CITY, LENGTH(CITY) LENGTH
FROM EMPLOYEE_TBL;
CITY
GREENWOOD
INDIANAPOLIS
WHITELAND
INDIANAPOLIS
INDIANAPOLIS
INSBRUC
ILLINOIS
7 rowes selected.
.
LENGTH
9
12
9
12
12
7
8
NVL ( NULL)
,
NULL.
, .
:
NVL(<>, < >);
:
SELECT PAGER, NVL(PAGER, 99999999) NEW_PAGER
FROM EMPLOYEE_TBL;
PAGER
86483527
86483527
86483527
NEW_PAGER
86324972
86483527
99999999
86483527
86483527
99999999
99999999
7 rowes selected.
.
LPAD RPAD
.
:
LPAD(_, , );
RPAD(_, , );
112
:
SELECT LPAD(CITY, 20, .)
FROM EMPLOYEE_TBL;
CITY
..INDIANAPOLIS
...WHITELAND
..INDIANAPOLIS
..INDIANAPOLIS
.INSBRUC
ILLINOIS
7 rowes selected.
SELECT RPAD(CITY, 20, .)
FROM EMPLOYEE_TBL;
CITY
GREENWOOD..
INDIANAPOLIS..
WHITELAND..
INDIANAPOLIS..
INDIANAPOLIS..
INSBRUC.
ILLINOIS
7 rowes selected.
ASCII (American Standart Code for Information Interchange)
ASCII .
:
ASCII(_);
:
ASCII(A) 65,
ASCII(B) 66,
ASCII(C) 67.
ABS
ROUND
SQRT
SIGN
POWER
EXP
SIN, COS, TAN
113
:
_()
.
:
;
;
;
.
1. ;
2.
;
3.
;
4. ,
.
.
( )
, SQL .
:
SQL Oracle, Oracle
.
, .
DATETIME,
SQL, Oracle, Sybase Microsoft SQL Server.
114
SQL
DATETIME.
-------------------------------------------------------------------------------------------DATE
TIME
TIMESTAMP
:
DATE
: --
: 0001-01-01 9999-12-31
TIME
::.nnn
: 00:00:00.000 23:59:61.999
TIMESTAMP
-- ::.nnn
: 0001-01-01 00:00:00.000 9999-12-31 23:59:61.999
DATETIME
DATETIME ,
. DATETIME
.
YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
0001 9999
01 12
01 31
00 23
00 59
00.000 61.999
, , ..
,
.
Oracle, Sybase Micrisoft SQL Server:
Oracle
Sybase
DATE
DATETIME
SMALLDATETIME
,
, DATETIME
115
Micriosoft SQL
DATETIME
TIMESTAMP
DATE
TIME
, , .
, ,
, , ..
()
()
.
.
:
SYSDATE Oracle;
GETDATE() Sybase Microsoft SQL Server.
:
Oracle
SELECT SYSDATE FROM <_>;
31-DEC-99
Sybase Microsoft SQL Server
SELECT GETDATE();
Dec 31,1999
(ora zonal)
SQL (ora zonal).
, ,
.
:
ASD, ADT
BST, BDT
CST, CDT
EST, EDT
GMT
HST, HDT
NST
PST, PDT
YST, YDT
(-) ,
,
,
,
( )
,
-
,
,
116
, .
DATETIME.
Oracle:
DATE 1999-12-31 + INTERVAL 1 DAY;
2000-01-01
DATE 1999-12-31 + INTERVAL 1 MONTH;
2000-01-31
ADD_MONTH Oracle:
SELECT DATE_HIRE, ADD_MONTH(DATE_HIRE, 1)
FROM EMPLOYEE_PAY_TBL;
DATE_HIRE
ADD_MONTH
23-MAY-89
23-JUN-89
17-JUN-90
17-JUL-90
14-AUG-94
14-SEP-94
28-JUN-97
28-JUL-97
22-JUL-96
22-AUG-96
14-JAN-91
14-FEB-91
6 rows selected.
Oracle,
SELECT DATE_HIRE, DATE_HIRE + 1
FROM EMPLOYEE_PAY_TBL
WHERE EMP_ID = 311549902;
DATE_HIRE
ADD_MONTH
23-MAY-89
24-MAY-89
1 row selected.
DATEADD SQL Server:
SELECT DATE_HIRE, DATEADD(MONTH, 1, DATE_HIRE)
FROM EMPLOYEE_PAY_TBL;
DATE_HIRE
ADD_MONTH
23-MAY-89
23-JUN-89
17-JUN-90
17-JUL-90
14-AUG-94
14-SEP-94
28-JUN-97
28-JUL-97
22-JUL-96
22-AUG-96
14-JAN-91
14-FEB-91
6 rows affected.
117
Oracle
NEXT_DAY
MONTH_BETWEEN
() DATEPART
DATEPART
() TIMEPART
TIMEPART
,
, ,
(, )
,
DATETIME. :
ANSI
CAST.
118
CAST ( AS )
CAST .
(date picture)
.
,
1999-12-31
31-DEC-99
1999-12-31 23:59:01.11
, , , ?
December 31, 1999
(: CAST( DATA 1999-12-31 AS Month dd, yyyy) ?)
Sybase SQL Server
yy
mm
dd
dw
hh
mi
ss
Oracle
AM
D
DD
DDD
DAY
(MONDAY)
Day
(Monday)
Day
(monday)
SQL Server:
SELECT DATE_HIRE = DATENAME(MONTH,DATE_HIRE)
FROM EMPLOYEE_PAY_TBL;
:
119
DATE_HIRE
May
June
August
June
July
January
6 rows affected
TO_CHAR Oracle
SELECT DATE_HIRE, TO_CHAR(DATE_HIRE, Month dd, yyyy) HIRE
FROM EMPLOYEE_PAY_TBL;
:
DATE_HIRE
HIRE
23-MAY-89
May
23, 1989
17-JUN-90
June
17, 1990
14-AUG-94
August 14, 1994
28-JUN-97
June
28, 1997
22-JUL-96
July
22, 1996
14-JAN-91
January 14, 1991
6 rows selected.
Oracle:
SELECT HIRE, TO_DATE(HIRE, DD-MON-YY)
FROM EMPLOYEE_PAY_TBL;
:
HIRE
TO_DATE(
May
23, 1989
23-MAY-89
June
17, 1990
17-JUN-90
August 14, 1994
14-AUG-94
June
28, 1997
28-JUN-97
July
22, 1996
22-JUL-96
January 14, 1991
14-JAN-91
6 rows selected.
Jonciunea tabelelor n interogrile SQL
:
(jonciune) ;
;
;
120
;
;
(aliaselor) .
.
.
,
.
,
, .
(tipuri de jonciune)
:
(EQUIJOINS);
(NATURAL JOINS);
(NON-EQUIJOINS);
(OUTER JOINS);
(SELF JOINS).
SELECT FROM SQL,
. WHERE.
=, <, >, <>, <=, >=, !=, BETWEEN, LIKE NOT.
.
SELECT EMPLOYEE_TBL.EMP_ID,
EMPLOYEE_PAY_TBL.DATE_HIRE
FROM EMPLOYEE_TBL,
EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_PAY_TBL.EMP_ID;
SELECT EMPLOYEE_TBL.EMP_ID, EMPLOYEE_TBL.LAST_NAME,
EMPLOYEE_PAY_TBL.POSITION
FROM EMPLOYEE_TBL, EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID = EMPLOYEE_PAY_TBL.EMP_ID;
.
SQL.
.
. SQL
.
.
:
SELECT E.EMP_ID, EP.SALARY, EP.DATE_HIRE, E.LAST_NAME
FROM EMPLOYEE_TBL E,
EMPLOYEE_PAY_TBL EP
WHERE E.EMP_ID = EP.EMP_ID
AND EP.SALARY > 20000;
.
(joinul natural)
,
.
SELECT EMPLOYEE_TBL.EMP_ID,
EMPLOYEE_PAY_TBL.DATE_HIRE
FROM EMPLOYEE_TBL,
EMPLOYEE_PAY_TBL
WHERE EMPLOYEE_TBL.EMP_ID != EMPLOYEE_PAY_TBL.EMP_ID;
SELECT E.EMP_ID, E.LAST_NAME, EP.POSITION
FROM EMPLOYEE_TBL E,
EMPLOYEE_PAY_TBL EP
WHERE E.EMP_ID != EP.EMP_ID;
,
.
123
.
, .
, ,
.
(OUTER JOIN) ,
,
. ,
, ,
. ,
(+) WHERE.
(Oracle)
FROM 1, 2 [,3]
WHERE 1._ [(+)] = 2._[(+)]
[ AND 1._ [(+)] = 3._[(+)] ]
,
.
PRODUCTS
QUANTITY
.
(SELF JOIN) ,
.
SQL .
124
NAME
JOHN
MARY
STEVE
JACK
SUE
MNGR_ID
0
1
1
2
2
, .
SELECT E1.NAME, E2.NAME MANAJER
FROM EMP_TBL E1, EMP_TBL E2
WHERE E1.MNGR_ID = E2.ID;
NAME
MARY
STEVE
JACK
SUE
MANAJER
JHON
JHON
MARY
MARY
,
, .
.
PROD_TBL
ORD_TBL
SERIAL_NUMBER
VENDOR_NUMBER
PRODUCT_NAME
COST
ORD_NO
SERIAL_NUMBER
VENDOR_NUMBER
QUANTITY
ORD_DATE
(PROD_TBL ORD_TBL)
:
SELECT P.PRODUCT_NAME, O.ORD_DATE, O.QUANTITY
FROM PROD_TBL P, ORD_TBL O
125
ORDERS_TBL
PRODUCTS_TBL
CUST_ID
CUST_NAME
ORD_NUM
CUST_ID
PROD_ID
QTY
ORD_DATE
PROD_ID
PROD_DESC
COST
:
SELECT C.CUST_NAME, P.PROD_DESC
FROM CUSTOMER_TBL C,
PRODUCTS_TBL P
ORDER_TBL O
WHERE C.CUST_ID = O.CUST_ID
AND P.PROD_ID = O.PROD_ID;
(produsul cartezian)
(CARTESIAN JOIN)
.
- (CROSS JOIN).
FROM 1, 2 [,3]
WHERE 1, 2 [,3]
126
,
,
.
.
.
- ( ),
.
SUBINTEROGRI N SQL
.
:
;
;
;
;
.
(subinterogare)
, WHERE
.
.
, ,
.
FROM
WHERE _ <> (SELECT _
FROM
WHERE );
WHERE,
HAVING .
=, <, >, >=, <=, <>, IN, NOT IN, AND, OR .. ,
WHERE HAVING.
SELECT, INSERT, UPDATE DELETE.
, , . ,
, .
:
;
SELECT, ,
;
ORDER BY ,
ORDER BY . ORDER BY
GROUP BY;
, ,
, , IN;
,
;
BETWEEN ,
.
BETWEEN
.
:
SELECT _
FROM
WHERE _ (SELECT _
FROM
WHERE _ BETWEEN );
:
SELECT _
FROM
WHERE _ BETWEEN AND
(SELECT _
FROM
WHERE _ BETWEEN );
SELECT, , ,
.
:
SELECT _ [, _]
FROM 1 [, 2]
WHERE _ (SELECT _ [, _]
FROM 1 [, 2]
WHERE );
:
SELECT E.EMP_ID, E.LAST_NAME, E.FIRST_NAME, EP.PAY_RATE
FROM EMPLOYEE_TBL E, EMPLOYEE_PAY_TBL EP
WHERE E.EMP_ID = EP.EMP_ID
AND EP.PAY_RATE > (SELECT PAY_RATE
FROM EMPLOYEE_PAY_TBL
WHERE E.EMP_ID = 3137782439);
.
SELECT PAY_RATE
FROM EMPLOYEE_PAY_TBL E
WHERE E.EMP_ID = 3137782439);
PAY_RATE
11
:
AND EP.PAY_RATE > 11.
, ,
.
:
4 rows updated.
IN,
!
. ,
, ,
, .
131
FUNCII DE UTILIZATOR
11. :
, .
. SQL.
(De dat dup tema Proceduri??? Logica: Sintaxa funciei este puin mai complicat. n comparaie
cu proceduri funciile permit apel direct nu prin parametru intermediar)
SQL ,
,
. ,
, ..
,
.
Exemplu cu procedur:
12.6. .
, .
CREATE PROC my_proc6
@m INT,
@s FLOAT OUTPUT
AS
SELECT @s=Sum(.*.)
FROM INNER JOIN
ON .=.
GROUP BY Month(.)
HAVING Month(.)=@m
12.6. .
, .
:
DECLARE @st FLOAT
EXEC my_proc6 1,@st OUTPUT
SELECT @st
, (
1).
, .
.
MS SQL
Server 2000. SQL
,
: .
, ,
, .
.
SQL Server :
132
Scalar ,
, BEGIN...END;
Inline SELECT
TABLE;
Multi-statement
TABLE, ,
SQL (INSERT, UPDATE ..).
, .
(proceduri stocate), ,
, ,
. , ,
. SELECT,
,
.
Scalar
Funcii de tip Scalar
:
<__>::=
{CREATE | ALTER } FUNCTION [.]
_
( [ { @_ __
[=default]}[,...n]])
RETURNS __
[WITH {ENCRYPTION | SCHEMABINDING}
[,...n] ]
[AS]
BEGIN
<_>
RETURN _
END
.
.
"@". .
, (DEFAULT),
.
RETURNS __ ,
. ,
.
, ,
WITH. ENCRYPTION ,
, ,
. . ,
,
.
, ,
SCHEMABINDING.
133
BEGIN...END ,
.
RETURN,
,
RETURN. ,
RETURN, .
,
.
, RETURNS.
11.1.
, .
user1.
CREATE FUNCTION
user1.sales(@data DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @c INT
SET @c=(SELECT SUM()
FROM
WHERE =@data)
RETURN (@c)
END
11.1. ,
.
.
, SELECT
.
.
: ,
02.11.01:
DECLARE @kol INT
SET @kol=user1.sales ('02.11.01')
SELECT @kol
(???)
SELECT user1.sales ('02.11.01')
Inline
Funcia Inline de tip TABLE
:
<__>::=
{CREATE | ALTER } FUNCTION [.]
_
( [ { @_ __
[=default]}[,...n]])
RETURNS TABLE
[ WITH {ENCRYPTION | SCHEMABINDING}
[,...n] ]
[AS]
134
:
SELECT
FROM user1.itog()
Multi-statement
Funcii Multi-statement de tip TABLE
Multi-statement
:
<__>::=
{CREATE | ALTER }FUNCTION [.]
_
( [ { @_ __
[=default]}[,...n]])
RETURNS @_ TABLE
<_>
[WITH {ENCRYPTION | SCHEMABINDING}
[,...n] ]
[AS]
BEGIN
<_>
RETURN
135
END
.
, , , TABLE.
, , Multi-statement
.
TABLE , ,
. <_>
,
CREATE TABLE.
INSERT,
. ,
SQL, ,
. INSERT
, . Multi-statement,
, - TABLE
.
:
RETURN.
, RETURN .
TABLE,
RETURNS.
RETURN.
, RETURN.
,
RETURN.
11.3.
Exemplu 11.3. De creat funcia care ne returneaz dou tabele (dac permite permite aa ceva
versiunea SQL???) cu informaii despre furnizorii unui ora i despre mrfurile de un tip dat.
CREATE FUNCTION User1.FurnizoriMarfuri
(@Oras CHAR(30) = Chiinu, @MarfaTip CHR(25) = Cri)
RETURNS Rurnizor1 TABLE (Furn_id CHAR(6) NOT NULL PRIMARY KEY, Furn_nume CHR(30) NOT
NULL), Marfa1 TABLE (Marfa_id CHAR(5) NOT NULL Primary KEY, Marfa_nume CHAR(25) NOT
NULL)
AS
BEGIN
INSERT INTO Furnizor1
(Furn_id, Furn_nume)
SELECT FurnId, FurnName
FROM Furnizor
WHERE FurnCity = @Oras
INSERT INTO Marfa1
(Marfa_id, Marfa_nume)
SELECT MarfaId, MarfaNume
From Marfa
WHERE MarfaName = @Marfa
RETURN
END
136
11.3. , .
137
b:
SELECT * FROM fn_findReports('b')
:
emp
mgr
----------b
a
e
f
f
b
g
b
a
SELECT * FROM fn_findReports('a')
emp
mgr
--------a
NULL
b
a
c
a
d
a
e
f
f
b
g
b
i
c
k
d
e:
SELECT * FROM fn_findReports('e')
emp
mgr
-------e
f
c :
SELECT * FROM fn_findReports('c')
emp
mgr
-------c
a
i
c
:
DROP FUNCTION {[ .] _ }
[,...n]
, SQL,
:
;
;
;
138
;
;
;
.
.
11.1.
ABS
ACOS
ASIN
ATAN
CEILING
COS
ATN2
DEGREES
EXP
COT
FLOOR
LOG
LOG10
PI
""
RADIANS
RAND
POWER
ROUND
SIGN
SIN
SQUARE
SQRT
TAN
SELECT ., .,
Round(.*.
*0.05,1)
AS
FROM INNER JOIN
ON .=
.
11.4. .
.
11.2.
ASCII
ASCII
CHAR
ASCII
CHARINDEX
139
DIFFERENCE
LEFT
LEN
LOWER
LTRIM
NCHAR
Unicode
PATINDEX
REPLACE
QUOTENAME
Unicode
REPLICATE
REVERSE
RIGHT
RTRIM
SOUNDEX
SPACE
STR
STUFF
SUBSTRING
Unicode-
UPPER
SELECT , []+""
+Left([],1)+"."
+Left([],1)
+"." AS
FROM
UNICODE
11.5. LEFT .
.
11.3.
, , ..
DATEDIFF
DATENAME
DATEPART
DATEADD
DAY
GETDATE
ISDATE
MONTH
YEAR
SELECT Year() AS , Month(])
AS ,
Sum() AS _
FROM
GROUP BY Year(), Month()
DECLARE @d DATETIME
DECLARE @y INT
SET @d=29.10.03
SET @y=DATEPART(yy,@d)
140
SELECT @y
11.7. .
;
;
SQL Server
, ;
,
,
;
;
;
, ,
;
:
,
. ,
, , .
, ,
.
.
, .
, ,
.
,
,
:
.
, ,
.
, .
141
-
. ,
. ,
.
.
.
MS SQL Server
SQL Server ,
.
, .
,
, .
i globale).
(din acea conexiune),
. ,
# (diez). ,
(automat se elimin de server)
, .
,
. ,
## (dublu diez).
, ,
.
,
(crearea, modificarea i eliminarea procedurilor stocate)
:
(definirea tipului) :
. ,
142
, sp_
.
;
(definirea
parametrelor de ntrare i
ieire). ,
,
;
:
<_>::=
{CREATE | ALTER } PROC[EDURE] _
[;]
[{@_ _ } [VARYING ]
[=default][OUTPUT] ][,...n]
[WITH { RECOMPILE | ENCRYPTION | RECOMPILE,
ENCRYPTION }]
[FOR REPLICATION]
AS
sql_ [...n]
.
sp_, #, ##,
. ,
, , ,
. ,
, CREATE PROCEDURE
.
, . .
. , ,
.
,
.
, ,
.
143
OUTPUT ,
. ,
.
OUTPUT
,
. , OUTPUT
. ,
.
VARYING OUTPUT, CURSOR.
, .
DEFAULT ,
. ,
.
,
.
.
RECOMPILE
.
FOR REPLICATION
.
ENCRYPTION
, ,
.
AS , ..
SQL, .
SQL, ,
.
RETURN.
:
DROP PROCEDURE {_} [,...n]
:
[[ EXEC [ UTE] _ [;]
[[@_=]{ | @_}
[OUTPUT ]|[DEFAULT ]][,...n]
,
EXECUTE . ,
.
OUTPUT
, OUTPUT.
144
DEFAULT,
. , DEFAULT
, .
EXECUTE ,
.
, .
,
. ,
, .
,
.
, ,
. .
12.1. .
, .
CREATE PROC my_proc1
AS
SELECT .,
.*.
AS , .
FROM INNER JOIN
( INNER JOIN
ON .=.)
ON .=.
WHERE .=
12.1. , .
:
EXEC my_proc1 my_proc1
.
12.2. .
10%.
CREATE PROC my_proc2
AS
UPDATE SET =*0.9
WHERE =
12.2. 10%.
:
EXEC my_proc2 my_proc2
.
12.3. .
, .
CREATE PROC my_proc3
@k VARCHAR(20)
AS
SELECT .,
145
.*.
AS , .
FROM INNER JOIN
( INNER JOIN
ON .=.)
ON .=.
WHERE .=@k
12.3. , .
:
EXEC my_proc3 ''
my_proc3 @k=''
12.4. .
%.
CREATE PROC my_proc4
@t VARCHAR(20), @p FLOAT
AS
UPDATE SET =*(1-@p)
WHERE =@t
12.4. %.
:
EXEC my_proc4 '',0.05
EXEC my_proc4 @t='', @p=0.05
12.5. .
%.
CREATE PROC my_proc5
@t VARCHAR(20)=',
@p FLOAT=0.1
AS
UPDATE SET =*(1-@p)
WHERE =@t
12.5. .
%.
:
EXEC my_proc5 '',0.05
EXEC my_proc5 @t='', @p=0.05
EXEC my_proc5 @p=0.05
(
).
EXEC my_proc5
( , ) ,
.
12.6. .
, .
CREATE PROC my_proc6
@m INT,
146
@s FLOAT OUTPUT
AS
SELECT @s=Sum(.*.)
FROM INNER JOIN
ON .=.
GROUP BY Month(.)
HAVING Month(.)=@m
12.6. .
, .
:
DECLARE @st FLOAT
EXEC my_proc6 1,@st OUTPUT
SELECT @st
, (
1).
, ,
.
, .
CREATE PROC my_proc7
@n VARCHAR(20),
@f VARCHAR(20) OUTPUT
AS
SELECT @f=
FROM
WHERE =@n
12.7. .
, ,
.
, ,
.
CREATE PROC my_proc8
@fam VARCHAR(20),
@kol INT OUTPUT
AS
DECLARE @firm VARCHAR(20)
EXEC my_proc7 @fam,@firm OUTPUT
SELECT @kol=Sum(.)
FROM INNER JOIN
ON .=.
GROUP BY .
HAVING .=@firm
12.7. , ,
.
:
DECLARE @k INT
EXEC my_proc8 ,@k OUTPUT
SELECT @k
147
Gestiunea tranzaciilor
Introducere
,
.
,
. DML (INSERT, UPDATE,
DELETE).
DML .
.
,
, .
, :
;
, ;
,
.
- .
(, , ,
), :
, ,
, .
. ,
.
.
.
,
. , ..
, ,
. .
.
.
148
,
.
, . ,
, ACID,
.
ACID-
Proprietile ACID a tranzaciilor
ACID atomicitate (indivizibilitate), consisten (concordan logic),
izolare (independen de alte tranzacii), durabilitate (modificrile
generate de tranzacie corect devin durabile)
ACID (Atomicity, Consistency, Isolation,
Durability , , , ).
(este atomic) ,
. , .
. , .
(este consistent),
- .
- ,
.
,
.
(este izolat),
.
,
.
(este durabil).
, ( )
, .. , ,
.
.
.
, -.
. , ,
.
, ..
.
.
1.1.
Gestiunea tranzaciilor ( )
, . ,
149
..
150
ROLLBACK
K
COMMIT
. 2. .
Instruciunea COMMIT
151
COMMIT [WORK];
WORK
.
:
PRODUCTS_TMP.
.
SELECT * FROM PRODUCTS_TMP;
PROD_ID
PROD_DESCR
COST
11235
222
90
1234
15
13
119
455
7.75
12.50
59.99
8.27
29.99
6.87
35.40
14.30
8 records selected.
DELETE FROM PRODUCTS_TMP
WHERE COST < 15;
5 records deleted.
COMMIT;
SELECT * FROM PRODUCTS_TMP;
PROD_ID
PROD_DESCR
COST
90
15
119
59.99
29.99
35.40
3 records selected.
COMMIT ,
.
Instruciunea ROLLBACK
152
PROD_DESCR
COST
90
15
119
59.99
29.99
35.40
3 records selected.
UPDATE PRODUCTS_TMP
SET COST = 39.99
WHERE PROD_ID = 15;
1 record updated.
, :
SELECT * FROM PRODUCTS_TMP;
PROD_ID
PROD_DESCR
COST
90
15
119
59.99
39.99
35.40
3 records selected.
ROLLBACK;
SELECT * FROM PRODUCTS_TMP;
PROD_ID
PROD_DESCR
COST
153
90
15
119
59.99
29.99
35.40
3 records selected.
.
6.2. Puncte de ntoarcere (salvare) SAVEPOINT SAVEPOINT
, ,
. ROLLBACK.
PROD_DESCR
COST
90
15
119
59.99
29.99
35.40
3 records selected.
SAVEPOINT SP1;
DELETE FROM PRODUCTS_TMP WHERE PROD_ID = 119;
1 record deleted.
SAVEPOINT SP2;
DELETE FROM PRODUCTS_TMP WHERE PROD_ID = 90;
1 record deleted.
154
SAVEPOINT SP3;
DELETE FROM PRODUCTS_TMP WHERE PROD_ID = 15;
1record deleted.
:
ROLLBACK SP2;
SELECT * FROM PRODUCTS_TMP;
PROD_ID
PROD_DESCR
COST
90
15
59.99
29.99
2 records selected.
( COMMIT)
( ROLLBACK):
ROLLBACK;
SELECT * FROM PRODUCT_TMP;
PROD_ID
PROD_DESCR
COST
90
15
119
59.99
29.99
35.40
3 records selected.
RELEASE SAVEPOINT
.
. ,
155
.
, ,
COMMIT ROLLBACK.
, 5000
10000 , ,
.
, ,
.
156
SQL
.
- (DML).
, .
SQL-,
.
.
/. ,
( )
,
.
SQL-,
. ,
.
, .
, ,
. ,
,
..
,
, .
.
.
.
. , .
.
, ..
. ,
,
.
,
, .
.
:
, , ,
, ;
,
, ;
157
, ;
.
CREATE TRIGGER :
<_>::=
CREATE TRIGGER _
BEFORE | AFTER <_>
ON <_>
[REFERENCING
<____>]
[FOR EACH { ROW | STATEMENT}]
[WHEN(_)]
<_>
, .
.
BEFORE (
) AFTER ( ).
(FOR EACH ROW),
, (FOR EACH STATEMENT).
<____> ,
(OLD / NEW) (OLD TABLE / NEW
TABLE). , ,
.
.
,
.
.
:
:
, ;
:
.
, , , ,
,
, ;
:
.
,
. ,
, .
, , ,
"" .
,
.
MS SQL Server
MS SQL Server
:
158
<_>::=
{CREATE | ALTER} TRIGGER _
ON {_ | _ }
[WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF }
{ [ DELETE] [,] [ INSERT] [,] [ UPDATE] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
sql_[...n]
} |
{ {FOR | AFTER | INSTEAD OF } { [INSERT] [,]
[UPDATE] }
[ WITH APPEND]
[ NOT FOR REPLICATION]
AS
{ IF UPDATE(_)
[ {AND | OR} UPDATE(_)] [...n]
|
IF (COLUMNS_UPDATES(){__}
__)
{__ }_ [...n]}
sql_ [...n]
}
}
,
, .
CREATE | ALTER TRIGGER.
.
.
WITH ENCRYPTION ,
, , .
,
.
SQL Server , :
AFTER. .
- ,
. ,
:
, .
AFTER- (INSERT, UPDATE,
DELETE). AFTER-,
sp_settriggerorder ,
, . SQL Server
AFTER-.
INSTEAD OF. . AFTER INSTEAD OF- ,
. INSERT, UPDATE, DELETE
INSTEAD OF-.
, .
:
INSERT TRIGGER
INSERT.
159
UPDATE TRIGGER
UPDATE.
DELETE TRIGGER
DELETE.
,
: inserted deleted. ,
. inserted deleted
, .
inserted deleted,
. , ,
inserted deleted :
INSERT inserted ,
; deleted ;
inserted ;
DELETE deleted ,
;
, ; inserted ;
UPDATE deleted
, .
inserted.
.
,
, @@ROWCOUNT;
, . ,
,
. ,
.
, 100 ,
, ,
160
.
, .
,
. ,
, ,
ROLLBACK TRANSACTION.
, INSERT UPDATE,
, COLUMNS_UPDATED().
, , ,
( ).
"1", . ,
UPDATE (_).
DROP TRIGGER {_} [,...n]
.
Exemplu 14.1. .
(Afaceri)
, (Depozit).
Fie schema tebelelor Afaceri, Depozit i Marfa sunt:
Afaceri(AfacereNumar, MarfaId, Cantitate, Data),
Depozit(OrdNum, MarfaId, FurnId, CantitateRest, Pret),
Marfa(MarfaId, MarfaNume, UnitMasura, Producator).
Cantitatea n coloana Cantitate a tabelului Afaceri se ea cu semnu + pentru operaii de cumprare i
cu semnul -pentru operaii de vnzare
O instrucie de nserare a unei nregistrri n tabela Afaceri poate fi n form:
INSERT INTO Afaceri
VALUES (1,3,-299,'01/08/2002')
:
,
( =3).
"+", ,
"-", .
.
CREATE TRIGGER Trig_Ins
ON Afaceri FOR INSERT
AS
IF @@ROWCOUNT=1 - s-a nserat o nregistrare
BEGIN
IF NOT EXISTS(SELECT *
FROM inserted
WHERE -inserted.<=ALL(SELECT
Depozit.CantitateRest
FROM Depozit,Afaceri
WHERE Depozit.MarfaId = Afaceri.MarfaId))
BEGIN
ROLLBACK TRAN
PRINT
'Afacere abandonat: marfa n depozit nu este'
END
END
161
, ,
. .
CREATE TRIGGER Trig_del
ON Afacere FOR DELETE
AS
IF @@ROWCOUNT=1 s-a eliminat o nregistrare
BEGIN
DECLARE @y INT,@x INT
--se determin codul i cantitatea mrfii eliminat din tabela Afaceri
SELECT @y=MarfaId, @x=Cantitate
FROM deleted
--n tabela Depozit se corecteaz cantitatea de marf rmas
UPDATE Depozit
SET CantitateRest = CantitateRest-@x
WHERE MarfaId=@y
END
Exemplu 14.3. .
, ,
:
INSERT INTO
VALUES (3,1,200,'01/08/2002')
3 1 200 .
. ,
.
.
ALTER TRIGGER _ins
ON FOR INSERT
AS
DECLARE @x INT, @y INT
IF @@ROWCOUNT=1
--
--
BEGIN
--
--,
IF NOT EXISTS(SELECT *
FROM inserted
WHERE -inserted.<
=ALL(SELECT .
FROM ,
WHERE .=
.))
BEGIN
ROLLBACK TRAN
PRINT ' '
END
-- ,
--
--
IF NOT EXISTS ( SELECT *
162
FROM , inserted i
WHERE .=i. )
INSERT INTO (,)
ELSE
--
--,
--
BEGIN
SELECT @y=i., @x=i.
FROM , inserted i
WHERE .=i.
--
--
UPDATE
SET =+@x
WHERE =@y
END
END
, , 3, 10
.
.
, , .
( )
( ) (
) ( )
. , ,
( deleted) ( inserted).
CREATE TRIGGER _upd
ON FOR UPDATE
AS
DECLARE @x INT, @x_old INT, @y INT, @y_old INT
--
DECLARE CUR1 CURSOR FOR
SELECT ,
FROM inserted
--
DECLARE CUR2 CURSOR FOR
SELECT ,
FROM deleted
OPEN CUR1
OPEN CUR2
--
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
WHILE @@FETCH_STATUS=0
BEGIN
--
--
UPDATE
SET =-@y_old
WHERE =@x_old
-- ,
-- ,
IF NOT EXISTS (SELECT * FROM
WHERE =@x)
INSERT INTO (,)
163
VALUES (@x,@y)
ELSE
--
--
UPDATE
SET =+@y
WHERE =@x
FETCH NEXT FROM CUR1 INTO @x, @y
FETCH NEXT FROM CUR2 INTO @x_old, @y_old
END
CLOSE CUR1
CLOSE CUR2
DEALLOCATE CUR1
DEALLOCATE CUR2
164
14.5.
(html, txt)
14.6. 14.5
. ,
.
, .
ALTER TRIGGER _upd
ON INSTEAD OF UPDATE
AS
DECLARE @k INT, @k_old INT
DECLARE @x INT, @x_old INT, @y INT
DECLARE @y_old INT ,@o INT
DECLARE CUR1 CURSOR FOR
SELECT , ,
FROM inserted
DECLARE CUR2 CURSOR FOR
SELECT , ,
FROM deleted
OPEN CUR1
OPEN CUR2
FETCH NEXT FROM CUR1 INTO @k,@x, @y
FETCH NEXT FROM CUR2 INTO @k_old,@x_old,
@y_old
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @o=
FROM
WHERE =@x
IF @o>=-@y
BEGIN
RAISERROR('',16,10)
UPDATE SET =@y,
=@x
WHERE =@k
UPDATE
SET =-@y_old
WHERE =@x_old
IF NOT EXISTS (SELECT * FROM
WHERE =@x)
INSERT INTO (, )
VALUES (@x,@y)
ELSE
UPDATE
SET =+@y
WHERE =@x
END
ELSE
RAISERROR(' ',16,10)
FETCH NEXT FROM CUR1 INTO @k,@x, @y
FETCH NEXT FROM CUR2 INTO @k_old,@x_old,
@y_old
END
CLOSE CUR1
CLOSE CUR2
165
DEALLOCATE CUR1
DEALLOCATE CUR2
14.6. ,
. (html, txt)
166
:
, -
?
:
create trigger tr on tbl
for update
as
set nocount on
--
update t set col_n = 'Qu!'
from tbl t join
inserted i on t.id = i.id join
--,
id tbl -
deleted d on t.id = d.id
and i.CheckColumn <> d.CheckColumn --
-- col_n - tbl,
" "
GO
:
, , Null ,
.
: ,
, .. ?
1:
, , rowversion (
timestamp),
( /).
2:
UPDATE(column_name)
COLUMNS_UPDATED().
update TBL set Col1 = Col1
UPDATE(Col1) , , , ,
UPDATE.
1024 .
83
167
--
CREATE TRIGGER dbo.ttt ON UserConfig FOR UPDATE
AS
BEGIN
declare @idx varbinary(128)
set @idx = columns_updated()
select * from fn_colupd('userconfig', @idx)
END
168
1.2.
U5
U6
U4
Server
BD1
Server
BD2
U2
U12
U3
Server
BD3
U11
U7
U9
U8
U10
,
.
.
SQL. SQL
.
( ).
SQL
. SQL-
, SQL.
, ,
SQL-.
( ).
1.4. Prelucrarea distribuit a datelor
Cum s-a spus mai sus, arhitectura sistemului de baze de date distribuit se bazeaz pe
structura sistemului distribuit de calcul folosind tehnologia client/server de interaciune
ntre componentele constituiente. Cu privire la baze de date arhitectura client/server
poate fi realizat n trei structuri care determin trei categorii de prelucrare al datelor:
o baz de date centralizat n arhitectura client/server. Mai muli clieni sunt
deservii de un server;
prelucrare cooperativ. Datele unei aplicaie sunt mprtiate pe diferite sisteme
(servere). Clientul are acces la oricare server (Fig. 1.1) dar n unul i acelai
moment de timp poate se adreseze interogarea numai la un server. n aceast
modalitate el nu poate obine combinaii de date din mai multe tabele. Plus la
aceasta el trebuie s tie pe care server se gsesc datele cerute;
prelucrare distribuit. Aplicaia (datele i componentele de gestiune) este
mprtiat pe mai multe sisteme care ruleaz simultan. Fiecare main poate se
joace rolul ct al clientului, att i al serverului. Cu alte cuvinte fiecare main
asigur funcionarea unui sistem de baze de date deplin. Clientul are acces la
oricare server simultan i n unul i acelai moment de timp poate se adreseze
interogri la oricare server. Poate se obin combinaii de date din mai multe
tabele i nu trebuie neaprat s tie unde se gsesc acestea date.
Ultimul din enumerate mai sus sisteme este un adevrat sistem de baze de date
distribuite. n acest sistem datele sunt transparente fa de aplicaii i pot fi memorate pe
172
Server BD1
U1
U2
Un
Server
de
aplicaii
Server BD2
Server BDm
diferite platforme cu diferite sisteme de operare. Din acest punct de vedere sunt posibile
sisteme de baze de date distribuite omogene i eterogene.
(omogene i eterogene)
.
.
.
- , .
, ,
(Fig. 1.2) .
, SQL- . ,
SQL
.
Din acest punct de vedere o baz de date distribuit este o baz de date controlat de
un SGBD cu arhitectura distribuit, n care dispozitivele de stocare a datelor sunt ataate
n mod distribuit la mai multe calculatoare. Aceste calculatoare pot ori s se afle fizic n
aceeai locaie (sal, cldire etc.), ori s fie dipersate ntr-o reea de calculatoare
interconectate.
Poriunea unei baze de date distribuite ataat la unul singur dintre calculatoarele
involvate este numit partiie sau fragment. Fiecare partiie a unei baze de date
distribuite se poate replica (duplica) identic ntr-o alt locaie, deci n alt calculator din
reea, cu scopul mririi siguranei n funcionare (fiabilitii). Pe baza acestei structuri
redundante, eventualele greeli/defecte n funcionare se pot de multe ori repara "n
zbor", deci fr ntreruperea funcionrii, similar ntr-o oarecare msur cu principiul
matricilor cu discuri hard multiple de tip RAID.
n afar de fragmentare i replicare, pentru bazele de date distribuite exist multe alte
modele. Aa de exemplu, autonomia local, de asemenea tehnologiile sincrone i
asincrone. Alegerea unei anumite baze de date distribuite i implementarea ei concret
depind de:
173
nevoile ntreprinderii,
confidenialitatea care trebuie garantat datelor din baza de date,
gradul necesar de securitate, consisten i integritate a datelor,
precum i de suma pe care compania este dispus s o investeasc.
Arhitectura de baz
Un server de baze de date este software-ul care administreaz baza de date; un client de
baze de date este o aplicaie care cere servicii de la server, de exemplu transmite date la,
sau cere date de la baza de date. De obicei pentru un server i baza de date
corespunztoare exist concomitent mai muli clieni. Fiecare calculator din reeaua de
calculatoare a bazei de date distribuite se numete un nod. Un nod al sistemului unei
baze de date distribuite se poate comporta drept server, drept client, sau chiar drept
ambele, n funcie de situaie.
Un tip important de baze de date distribuite sunt bazele de date distribuite relationale,
conduse de un Relational Data Base Management System (RDBMS). n cadrul acestor
baze de date avem:
Fragmente orizontale subseturi de tupluri (nregistrri) dintr-o relaie (tabel).
Fragmente verticale subseturi de atribute (coloane) dintr-o relaie (tabel).
Fragmente mixte un fragment care este fragmentat att orizontal, ct i vertical.
Baz de date ditribuit omogen folosete un SGBD (exemplu: Oracle).
Baz de date distribuit eterogen folosete mai multe SGBD (exemple: Oracle ; MySql; PostgreSQL).
Utilizatorii acceseaz baza de date distribuit prin:
Aplicaii locale (aplicaii care nu necesit date de pe alte situri), sau
Aplicaii globale (aplicaii care au nevoie de date de pe alte situri).
174
175
Dou probleme:
Am un "nepotel" care n-a prea data la scoala si acum tb sa faca aceste teme ca sa treaca un examen.
As dori sa stiu cat ar costa realizarea lor. Nu prea e educativ ceea ce fac, dar ca sa am liniste in familie
a trebuit sa promit ca ma implic in salvarea naravasului.
Multumesc
Tema 1 (pentru cei care nu au avut punctaj sufficient la laborator):
Sa se creeze o aplicatie windows forms care sa permita gestiunea cd-urilor.
1. fiecare CD se presupune a avea o eticheta unica, dupa care se face identificarea
2. se pot crea categorii care contin: fisiere, directoare sau alte subcategorii (figurativ, ele trebuie sa se
deosebeasca)
3. Daca se asociaza un director cu o categorie, atunci numele tuturor fisierelor cu o extensii specificate
(ex: pdf, chm, doc) vor fi trecute in baza de date (continutul va fi scanat recursiv)
4. Sa permita: alegerea unui cd din BD (CD-ul nu trebuie sa fie introdus in unitate), afisarea
categoriilor corespunzatoare acelui cd, afisarea continutului pentru fiecare categorie, modificarea
acestor asocieri
5. Aditional pt punctual 4: daca cd-ul corespunzator este in unitate (fapt confirmat de catre utilizator),
atunci se poate completa lista de categorii si fisiere (se poate continua editarea continutului din BD)
6. Sa se poata face vizualizarea continutului CD-urilor salvat in BD (fara cd in unitate): categorii,
directoare asociate, fisiere, etc, sub forma arborescenta.
7. Cautare (fara ca in unitate sa avem CD) dupa urmatoarele criterii:
a. nume de categorie: sa apara in forma arborescenta cd-urile pe care am definite aceste categorii,
directoarele/fisierele cu calea si numele complet
b. nume de fisier sau director, sau doar parte din numele sau (ex: curs*.pdf sau *security*.*)
c. nume de categorie + nume de fisier si director; ex categoria = securitate iar nume de fisier =
*java*.*
Baza de date va fi Microsoft SQL Server 2005. Se puncteaza realizarea unei interfete utilizator
intuitive.
Tema 2 biblioteca
Sa se creeze o aplicatie de tip Windows Forms in C# care sa permita gestionarea activitatii unei
biblioteci. Trebuie sa se permita urmatoarele:
1. Adaugarea de carti (1 sau mai multe exemplare) impreuna cu autorii lor, stabilirea statutului cartilor
imprumutabile sau doar la sala de lectura; o carte poate avea mai multi autori, un autor poate scrie
mai multe carti
2. Adaugarea cititorilor, modificarea datelor acestora
3. Efectuarea de imprumuturi si returnari de carti; un cititor poate sa posede la un mom dat nu mai
mult de 3 carti, perioada lor de detinere nu mai mare de 1 luna
4. Lista cu: cititorii restantieri (impreuna cu cartile datorate), cartile cele mai imprumutate, lista cartilor
imprumutate vreodata de un cititor, lista cartilor cu un anumit autor
Baza de date va fi creata sub MS SQL Server 2005. Constantele aplicatiei (numar de carti maxim,
durata maxima, stringurile de conexiune, etc) nu vor fi hard-codate in program, ci in tabele sau fisiere
de configurare (dupa caz). Nu este permis ca in clasele de tip Form sa se lucreze cu parte de logica a
aplicatiei sau conexiuni la baza de date. Toate prelucrarile/slectiile pe baza de date se vor face prin
proceduri stocate. Se pot folosi triggere sau tranzactii. Tabelele vor fi in FN3.
La prezentare nu se admite recompilarea codului. Baza de date va avea numele format astfel:
numestudent_grupa_biblioteca.
176
177
pot lmuri coninutul semantic a fragmentului dat de cod SQL. n Nr. 2, 3, 25,
sunt greeli. Formularea mai bun a itemului: Ce prezint acest fragment de cod.
Ce se va produce ca rezultatul executrii lui. Explicai coninutul semantic a
rezultatului.
6. Contorizeaz
7. Se imbric, sconteaz, pertinent, compromite, comparare, iteme, tipuri de itemi
8. Testare formativ prin sistemul Moodle
9.
178