Sunteți pe pagina 1din 9

CREAREA BAZELOR DE DATE SQL SERVER

O baz de date SQL Server este compus din trei tipuri de fiiere: un fiier cu
extensia .mdf zero sau mai multe fiiere cu extensia .ndf i unul cu extensia .ldf
n fiierul cu extensia .mdf sunt stocate obiectele bazei de date precum tabelele,
indexii, vederile etc. mpreun cu definiiile lor, fiierele cu extensia .ndf sunt fiiere
secundare ce conin numai date, iar fiierul cu extensia .ldf conine jurnalul de tranzacii.
Orice baz de date are asociat un jurnal de tranzacii. Actualizarea unei nregistrri a
bazei de date presupune memorarea n jurnalul de tranzacii a coninutului nregistrrii
dinainte i dup actualizare. Jurnalul de tranzacii este folosit pentru restaurarea bazei de
date n situaia n care apare o eroare ce necesit anularea sau reluarea unor operaii
nregistrate.
Pentru crearea unei baze de date se folosete comanda Create database care n
form simplificat se prezint conform urmtoarelor exemple:
1)

CREATE DATABASE dbStudenti


2)

CREATE DATABASE dbStudenti


ON
( NAME = dbStd,
FILENAME = 'L:\DB\Studenti.mdf'
)
3)

CREATE DATABASE dbStudenti


ON
( NAME = dbStd,
FILENAME = 'L:\DB\Studenti.mdf'
)
LOG ON
( NAME = dbStd_log,
FILENAME = 'L:\DB\Studenti.ldf'
)

4)
CREATE DATABASE dbMultiFisier
ON PRIMARY
( NAME = F1,
FILENAME = 'L:\db\Fisier1.mdf',
SIZE = 2MB,
MAXSIZE = 10MB,
FILEGROWTH = 10%),
( NAME = F2,
FILENAME = 'L:\db\Fisier2.ndf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 10%),
( NAME = F3,

FILENAME = 'L:\db\Fisier3.ndf',
SIZE = 1MB,
MAXSIZE = 10MB,
FILEGROWTH = 10%)
LOG ON
( NAME = F_Log1,
FILENAME = 'L:\DB\Fisier_Log1.ldf',
SIZE = 512KB,
MAXSIZE = 10MB,
FILEGROWTH = 10%),
( NAME = F_Log2,
FILENAME = 'L:\db\Fisier_Log2.ldf',
SIZE = 512KB,
MAXSIZE = 10MB,
FILEGROWTH = 10%)

In exemplul 1) baza de date dbStudenti va fi creat n folderul implicit


C:\Program Files\Microsoft SQL Server\MSSQL\Data, precizat n timpul instalrii
sistemului SQL Server
In exemplele 2), 3) i 4) baza de date va fi creat n folderul DB al unitii L (care
poate fi, de exemplu, un stick usb)
ON semnific utilizarea unui grup de fiiere
NAME -furnizeaz numele logic al fiierului datelor, respectiv al jurnalului
FILENAME -furnizeaz numele fizic al fiierului datelor, respectiv al jurnalului
SIZE parametru opional, specific dimensiunea iniial a fiierului msurat n
KB, MB sau GB, valoare implicit 1MB pentru fiierul de date i 512KB pentru fiierul
jurnal. Unitatea de msur implicit este MB.
MAXSIZE -parametru opional, specific dimensiunea maxim la care poate
ajunge fiierul. Dac se specific MAXSIZE sau i se atribuie UNLIMITED atunci
fiierul crete ct i permite spaiul liber de pe disc
FILEGROWTH parametru opional, precizeaz pasul cu care crete
dimensiunea fiierului, n valoare absolut sau n procente raportat la fiierul asociat.
Valoarea implicit este de 256KB cu valoarea minim 64KB. Valoarea 0 impiedic
creterea fiierului.
TERGEREA BAZELOR DE DATE
Sintaxa:
DROP DATABASE denumire_baz_date

SALVAREA BAZELOR DE DATE


BACKUP DATABASE dbStudeti
TO DISK='g:\dbSalvari\dbStudenti.bak'

In SQL Server 2008 a fost introdus backup-ul compresat. Acesta se realizeaza cu


comanda BACKUP la care se adauga clauza WITH COMPRESSION.
2

Exemplu:
BACKUP DATABASE dbStudeti
TO DISK='g:\dbSalvari\dbStudenti.bak' WITH COMPRESSION

RESTAURAREA BAZELOR DE DATE


RESTORE DATABASE dbStudeti
FROM DISK='g:\salvari\ dbStudeti.bak'

INSTALAREA BAZELOR DE DATE


Procedura de sistem sp_attach_db este folosit pentru a face o baz de date
portabil, accesibil de pe un server nou. Astfel, dac o baz de date este stocat pe un
support amovibil(nu neaprat), ea poate fi instalat printr-un appel de forma
sp_attach_db dbStd, 'L:\DB\Studenti.mdf'
Numele bazei de date nu este necesar s coincid cu cel iniial

Instalarea unei baze de date se poate face i cu ajutorul comenzii create database
cu folosirea clauzei for attach ca mai jos:
create database dbStd
on
(filename='L:\db\Studenti.mdf')
for attach

DEZINSTALAREA BAZELOR DE DATE


Procedura de sistem sp_detach_db este folosit pentru dezinstalarea bazelor de
date prin apeluri de forma:
sp_detach_db dbStd
Observaie

SQL Server Management Studio ofera faciliti grafice pentru instalarea i


dezinstalarea bazelor de date

TIPURI DE DATE MICROSOFT SQL SERVER


Microsoft SQL Server conine urmtoarele tipuri de date predefinite, mprite n
grupe:

Tipuri de date pentru numere ntregi


bit numere ntregi care pot lua una din dou valori: 0 sau 1 sau NULL.
tinyint numr ntreg fr semn pe 1 octet, valori posibile de la 0 la 255.
smallint numr ntreg cu semn pe 2 octei, valori posibile de la 2^15 (32,768) pn la 2^15 - 1 (32,767).
int sau integer numr ntreg cu semn pe 4 octei, valori admisibile de la
-2^31 (-2,147,483,648) pn 2^31 - 1 (2,147,483,647).
Bigint numr ntreg cu semn pe 8 octei, valori admisibile de la -2^63 pn
2^63 1.
Observii:
- SQL Server ntoarce un mesaj de eroare dac se incearc inserarea unei
valori care nu se ncadreaz n domeniul de valori corespunztor tipului de date.
-Tipul bit are o reprezentare optimizat, astfel dac intr-o tabel exist mai
multe atribute de tip bit, acestea vor fi mpachetate la nivel de octet: 1 octet pan la 8
atribute, 2 octei 9-16 atribute etc.

Tipuri de date pentru numere zecimale cu virgula fix


Decimal[(p[,s])] numere zecimale cu virgula fixat, valori posibila ntre
-10^38 -1 i 10^38 -1.
numeric[(p[,s])] echivalent cu tipul decimal.
p (precizia) numrul total de cifre care pot fi stocate, inclusiv partea ntreag i
partea zecimal. Precizia poate lua valori de la 1 la 38. Valoarea implicit a lui p este 18.
s (scale) numrul de cifre zecimale. Poate lua valori de la 0 la p. Valoare
implicit 0.
Numrul de octei alocai tipului decimal/numeric depinde de precizie dup cum
urmeaz:
Precizia
Nr octei
1-9

10-19

20-28

13

29-38

17

Tipuri de date pentru uniti monetare


money numerice zecimale cu 4 cifre dup virgul, poate lua valori n intervalul
de la -2^63 (-922,337,203,685,477.5808) pn la 2^63 - 1 (+922,337,203,685,477.5807).
smallmoney numere zecimal cu 4 cifre dup virgul, ia valori n intervalul de
la

-214,748.3648 pn la +214,748.3647.
Obs. Toate tipurile numerice de date cu excepia money i smallmoney sunt
convertite implicit din iruri de caractere n timpul executrii instruciunilor Insert i
Update.
De exemplu
insert into tabelTest(c1) values('45')

va genera un mesaj de eroare dac c1 este de tip money si va funciona corect


pentru orice alt tip numeric
Pentru rezolvarea problemei, putem face o transformare explicit astfel:
insert into tabelTest(c1) values(cast('45' as money))

Tipuri de date pentru numere zecimale cu virgula mobil


real Poate s rein numere zecimale numere pozitive i negative n virgula
flotant din intervalul de la 3.4E -38 pn la 3.4E + 38 cu o precizie de 7 cifre. Este
reprezentat pe 4 octei.
float[(n)] Dac se specific o valoare ntre 1 i 7 pentru n, tipul definit este
similar cu tipul real, iar dac nu se specific nicio valoare pentru n sau se specific o
valoare ntre 8 i 15, numerele stocate se pot afla n intervalul de la -1.79E -308 pn
1a.79E + 308(pozitive i negative).
Observaie: Valorile n virgul mobil sunt supuse erorilor de rotunjire. Ele
asigur acuratee numai pn la numrul de cifre specificat ca precizie. De exemplu, n
cazul unei precizii de 7 cifre este posibil stocarea unui numr cu mai mult de 7 cifre, dar
nu se garanteaz c cifrele ncepnd cu a 8-a mai reprezint exact numrul stocat.
De exemplu
insert into tabelTest (c1) values(123456789123)

va stoca o valoare aproximativ daca c1 este de tip real, dup cum se observa i
din rezultatul furnizat de urmtoarea fraz select:
select c, cast(c as bigint) from t1
1.234568E+11

123456790528

Tipuri de date pentru date calendaristice i timp


datetime Este reprezentat pe 8 octei i pstreaz data i ora. Data poate fi o
valoarea n intervalul de la 1 ianuarie anul 1753 pn la 31 decembrie anul 9999. Timpul
se definete cu exactitate de sutimi de secunde.
smalldatetime Este reprezentat pe 4 octei i pstreaz data i ora. Data
poate lua o valoare din intervalul de la 1 ianuarie anul 1900 pn la 6 iunie anul 2097.
Timpul se pstreaz cu o acuratee de1 minut.

Tipuri de date pentru iruri de caractere


char[(n)] iruri de caractere ASCII de lungime fixat de n caractere, dac n
lipsete lungimea este de 1 caracter. Parametrul n poate lua valori intre 1 i 8000. irul de
caractere se va completa cu caractere spaiu dac mrimea curent a irului este mai mic
dect n.
varchar(n) - iruri de caractere ASCII de lungime variabil (maximum 8000
caractere), se folosete cnd datele au lungimi ce variaz in plaje largi. Spaiul de stocare
folosit se adapteaz la numrul curent de caractere al irului.
text - iruri de caractere ASCII de lungime variabil, (lungimea maximal
2^31-1 caractere, 2,147,483,647 caractere). irul de caractere este memorat n pagini de
8ko fiecare
nchar - iruri de caractere UNICODE de lungime fixat (maxium 4000
caractere)
nvarchar - iruri de caractere UNICODE de lungime variabil (maxium 4000
caractere)
ntext - iruri de caractere UNICODE de lungime variabil (lungimea maximal
2^30 1, sau 1,073,741,823 caractere)

Tipuri de date pentru iruri binare


Binary[(n)] ir binar de lungime fixat (maximum 8,000 octei). Se
folosete pentru stocarea unor secvene de bii. Valorile de tip binar sunt reprezentate n
sistem hexazecimal i se introduc uzual tot n hexazecimal(precedate de 0x ).
varbinary[(n)] ir binar de lungime variabil (maximum 8,000 octei).
image ir binar de lungime fixat (maximum 2^31 - 1 sau 2,147,483,647
octei).
timestamp O valoare de tip timestamp este o valoare special de tip
binary(8). Tipul timestamp garanteaz unicitatea valorilor coloanei asociate. O tabel
poate avea o singur coloan de tip timestamp. Valoarea coloanei de tip timestamp este
modificat automat dup ficare modificare a tuplei. Ea ne arat ordinea operaiilor
efectuate de SQL Server. Marcile de timp(timestamp) se pot folosi pentru a impiedica doi
utilizatori s modifice aceeai tupl. Tipul timestamp nu reprezint data i or. Valoarea
timestamp ce va fi nscris ca marc la urmtoarea modificare sau inserare de linie poate
fi accesat prin intermediul variabilei globale @@DBTS.
uniqueidentifier reprezint un identificator unic global(GUID) pe 16
octei i asigur unicitatea valorilor la nivelul bazei de date. Generarea n Transact SQL a
unui nou uniqueidentifier se face cu NEWID()

Crearea tabelelor
Comanda CREATE TABLE permite crearea unei noi tabele. Sintaxa sa este
urmtoarea:
CREATE TABLE denumire_tabel
( denumire_coloan1 tip_de_dat [ constrngere_la_nivel_de_coloan]
[, denumire_coloan2 tip_de_dat [ constrngere_la_nivel_de_coloan] ]
[, constrngere1_la_nivel_de_rand]
[, constrngere2_la_nivel_de_rand ]
)
O constrngere este un mecanism care ne asigur c valorile unei coloane sau ale
unei mulimi de coloane satisfac o condiie dat. Dac nu se specific un nume explicit
pentru constrngere atunci sistemul i atribuie unul nume.
Constrngeri la nivel de coloan
Sintaxa
[Constraint denumire_constrngere] constrngere1 [constrangere2 ]
Constrngerea NULL
Specific faptul c sunt permise valori Null pentru coloana respectiv.
Constrngerea NULL este implicit.
Exemplu:

Telefon char(10) NULL

Constrngerea NOT NULL


Specific faptul c sunt interzise valorile Null pentru coloana respectiv
Exemplu:
Nume char(30) NOT NULL

Constrngerea DEFAULT
Specific o valoare implicit care este atribuit cnd nu se specific o valoare
explicit pentru coloana respectiv
Sintaxa:
DEFAULT expresie_constanta
Exemple:
Data SmallDateTime default getdate(),
CodJudet char(2) default 'AG',
Cantitate numeric(8,3) default 0

Constrngerea IDENTITY

Indic o coloan pentru care SQL Server genereaz n mod automat valori
incremental, unice la nivel de tabel
Exemplu
id_detaliu
id bigint

int identity(101,1)
identity

Primul parametru reprezint valoarea atribuit primei tuple, iar al doilea parametru
reprezint valoarea de incrementare. Parametrii pot lipsi, ei au valoarea implicit 1.
Constrngerea PRIMARY KEY
Impune valori unice i nenule pentru coloana n cauz, coloana reprezint cheia
primar a tabelei
Exemplu:
CodFurnizor char(10) primary key

Constrngerea UNIQUE
Impune valori unice pentru coloana n cauz, coloana reprezint o cheie candidat a
tabelei
Exemple:
marca int unique
CNP char(13) constraint ix_cnp unique

Constrngerile PRIMARY KEY i UNIQUE genereaz implicit chei de indexare.


Un index poate fi de tip CLUSTERED, caz n care ordinea fizic a rndurilor tabelei
coincide cu ordinea logic(tabela este sortat dup cheia indexului clustered), sau
NONCLUSTERED. Evident c o singur cheie poate fi de tip clustered. Opiunea
implicit pentru PRIMARY KEY est CLUSTERED, iar pentru UNIQUE este
NONCLUSTERED, dar pot fi schimbate ca in exemplul urmtor:
marca int primary key nonclustered,
CNP char(13)constraint ix_cnp unique clustered

Constrngerea FOREIGN KEY


Constrngerea Foreign key se folosete uzual mpreun cu Primary key pentru a
rezolva problema integritii refereniale.
Sintaxa:
[FOREIGN KEY] REFERENCES tabela_referit(coloana_referit)
[ON DELETE {CASCADE | NO ACTION}]
[ON UPDATE {CASCADE | NO ACTION}]

Coloana_referit trebuie s fie definit ca Primary key sau Unique.


ON DELETE CASCADE menine integritatea referenial n cazul tergerii unui
rnd din tabela_referit (care conine cheia primar sau unic), prin tergerea tuturor
rndurilor ce conin cheii strine dependente.
Valoarea implicit este ON DELETE NO ACTION.
ON UPDATE CASCADE -menine integritatea referenial n cazul modificrii
valorii coloanei referite din tabela asociat (care conine cheia primar sau unic), prin
propagarea modificrii tuturor rndurilor ce conin cheia strin dependent.
8

Valoarea implicit este ON UPDATE NO ACTION.


Constrngerea CHECK
Definete o restricie de domeniu pecare trebuie s o satisfac datele din coloana
respectiv
Sintaxa:
CHECK (expresie_logic)
Salariu int CHECK (Salariu >= 600 AND Salariu <= 8000)
Nota INT CHECK (Nota BETWEEN 1 AND 10)
DenumireZi char(10) check(DenumireZi in (luni, marti,
miercuri))

Observatie:
Coloanele supuse unor reguli check pot primi valoarea null dac nu se impune
constrngerea not null.

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