Professional Documents
Culture Documents
BaiGiang Sqlserver
BaiGiang Sqlserver
Ver 1.0
I. Tng quan :
1.SQL SerVer la mt h qun tr
CSDL quan h
A. C S D Liu Quan H :
D liu c t chc lu tr
thanh tng bng
Mt bng dung lu tr
thong tin ca mt i tng
ngoai th gii thc
Mt
bng c to t dong va
ct
I:Tng Quan(tt)
Dong :tp hp d liu ca
nhiu ct
Trong mt bng khong the
co hai dong trung thong
tin
Mot dong cho biet thong
tin cu the cua mot oi
tng lu tr trong bang
Mt bng co th khong co
dong nao
I.Tng Quan(tt)
Khoa Chnh (Primary Key) :
Tp hp ca mt hay nhiu ct trong
bng
D liu ti ct nay khac rng
D liu ti ct nay la duy nht trong
bng
I.Tng Quan(tt)
B.H Qun Tr CSDL Quan H :
La mt h thng cac chng
trnh co cac chc nng
To va qun ly mt CSDL Quan
h
khai thac Mt CSDL Quan h
Bo mt Mt CSDL Quan h
To bng sao (Backup) Mt CSDL
Quan h
Phc hI(Restore) Mt CSDL Quan
SQL Server
la mt h qun tr
h
CSDL Quan h
Yu cu
RAM
T 64MB tr ln
a cng
Cn trng 100MB tr
ln
Mn hnh
H iu Hnh
Personal Edition
Co th chy
tren tt c cac
h iu hanh
Microsoft Windows
Server(nt,2000,Xp
Server)
Cho
n
Cho
n
Chon
Chon
Chon
Nhap
vao
ten
ngi
dung
Chon
Ten
CSDL
Y ngha
Master
La CSDL quan ly
thong tin cua cac
CSDL con lai
Mode
La CSDL mau
Msdb
Ten
CSDL
Jobs
Northwin
d
pubs
Y ngha
Cu trc lu tr ca mt CSDL :
Mt CSDL trong SQL Server ti thiu
s dng hai tp tin vt l lu tr
d liu:
Mt dng lu tr cc vt
giao tc (Transaction log file)
Data Files
Primary
DataFile
(*.MDF)
Secondary
Data Fie
(*.NDF)
Log Files
Log file
(*.LDF)
To mi mt CSDL trong
SQL Server
Cch 1: S dng tin
ch
EnterPriseManager :
Click chuc phi vo
i tng Databases
chn New Database
Nhp tn
CSDL
Kch
thc
Min gi tr d liu lu tr
4 bytes
t-2,147,483,648n +2,147,483,647
SmallInt
2 bytes
t -32768 n +32767
TinyInt
1 byte
t 0 n 255
Bit
1 byte
0, 1 hoc Null
17bytes
t -10^38 n +10^38
8 bytes
t -1.79E+308 n +1.79E+308
Real
4 bytes
t -3.40E+38 n +3.40E+38
N bytes
t 1 n 8000 k t, mi k t l
mt byte
N bytes
t 1 n 8000 k t, mi k t l 1
byte
Text
N bytes
t 1 n 2,147,483,647 k t, mi
k t l 1 byte
2*N
bytes
t 1 n 4000 k t, mi k t l 2
bytes
NVarCha
r
2*N
bytes
t 1 n 4000 k t, mi k t l 2
bytes
NText
2*N
bytes
t 1 n 1,073,741,823 k t, mi k
t l 2 bytes
8 bytes
t
-922,337,203,685,477.5808
+922,337,203,685,477.5807
SmallMoney
4 bytes
t -214,748.3648 n + 214,748.3647
8 bytes
t01/01/1753n31/12/9999
SmallDateTime
4 bytes
t01/01/1900n06/06/2079
N bytes
t 1 n 8000 bytes
VarBinary
N bytes
t 1 n 8000 bytes
Image
N bytes
t 1
bytes
2,147,483,647
To cu trc bng c gi tr mc nh
C php:
CREATE TABLE Tn_bng
(
Tn_ct_1 Kiu_d_liu DEFAULT Gi_tr|Hm ,
Tn_ct_2 Kiu_d_liu [NOT NULL] [ ,...]
)
Trong :
+ Gi tr: l gi tr c th s c gn vo ct.
+ Hm: l tn hm cng vi cc tham s (nu c), tuy nhin
kiu d liu m hm tr v phi l cng vi kiu d liu m ct
s lu tr.
V d 1
CREATE TABLE VATTU
(
MAVTU CHAR(4) NOT NULL,
TENVTU VARCHAR(100) NOT NULL,
DVTINH VARCHAR(10) NOT NULL,
PHANTRAM REAL DEFAULT 20
)
V d 2
CREATE TABLE DONDH
(
SODH CHAR(4) NOT NULL,
NGAYDH DATETIME DEFAULT GETDATE(),
MANHACC CHAR(3) NOT NULL
)
Tnh ton vn d liu trong c s d liu : cc rng buc trong SQL Server c qun l bI hai I tng :CONSTRAINT v TRIGGER
Constraint : qun l cc rng buc nh :
Rng buc d liu duy nht
Rng buc d liu tn ti
Rng buc min gi tr
Trigger :Qun l cc rng buc phc tp,lin quan n d liu trn nhiu bng
Xy dng cc Constraint
A>Kim tra
BI 3: BNG o(view)
1>nh Ngha :
Bng o l mt i tng cha cu lnh Select ly d liu
T cc bng trong csdl
Khi truy cp vo CSLD ,ngi s dng khng phn bit c Bng o
v Bng Tht
2> To View
Create view Ten_view
As
Cu lnh Select
Case
When iu kin 1 Then Gi tr 1
When iu kin 2 then Gi tr 2
Else
Gi tri n
End
hin th d liu
Mnh from : cho bit d liu trn cu truy vn c ly t cc bng no
nu d liu ly t nhiu bng th cc bng ny phi c quan h vi nhau:
C php :
Left
Right
full
Like tm chui gn ng
% Thay th 1 chui
_(Gch di) thay th 1 k t
Ton t BETWEEN Gt1 AND GT2
Cc Hm thng k:
Sum(Ten_Cot) :tnh tng vi ct c kiu s
Count(Ten_Cot/*) :tnh tng s dng
AVG(Ten_Cot) :tnh gi tr trung bnh
Max(Ten_cot) : gi tr ln nht
Min(Ten_Cot) :gi tr nh nht)
vi gi tr :
kiu chui : nm trong hai du v d Trn thanh nht
Kiu Ngy : yyyy-mm-dd
v d :1982-02-29
Thm nhiu dng
C php : Inser into Ten_bang_Dich(Ten_cot1,Ten_cot2[,])
Select Ten_bang_nguon.ten_cot ,
from
C php :
UpDate Ten_Bang
Set Ten_Cot= Gi tr/Biu thc
[Where iu kin]
D liu Update trn nhiu Bng :
C php :
UpDate Ten_Bang
Set Ten_Cot= Gi tr/Biu thc
From
[Where iu kin]
Ch : d liu cp nht c th l mt gi tr thng k tr v t cu truy
vn con
C th dng cu trc Case trong lnh cp nht
Trong cu truy vn update khng s dng hm thng k
C php :
delete Ten_Bang
[Where iu kin]
D liu delete trn nhiu Bng :
C php :
delete Ten_Bang
From
[Where iu kin]
Ch : khi xa d liu trn bng quan h 1 m d liu ny
c bn bng quan h nhiu -> c li
Gn gi tr cho bin:
Gn bng 1 gi tr :
Set @tn_bin=gitr/hm
hoc Select @tn_bin=Gitr/hm
Gn bng kt qu tr v ca cu truy vn
Select @tn_Bin=Tnct/Hm ..from ..
Tn Bin
ngha
@@Error
@@Rowcount
Hin th d liu
101
Mm/dd/yyyy
103
Dd/mm/yyyy
105
Dd-mm-yyyy
12
112
Yyyymmdd
nh dng
Nm
yy, yyyy
Qu
qq, q
Thng
mm, m
Ngy trong nm
dy, y
dw
dd, d
Tun
wk, ww
Gi
hh
pht
mi, n
giy
ss, s
Bi 5: Th tc ni TI(Stored procedure)
1>Th tc ni ti l g ?
l Chng trnh con ca Sql SerVer
Trong th tc ni ti c th cha cc cu lnh truy vn, cc lnh
T-SQL
Th tc ni ti c th c cc tham s vo, tham s ra v c th tr
v kt qu
Ta c th gI th tc ni ti trong SQL hay trong cc ng dng
c xy dng bng VB,VB.NET
Cc x l xy dng trong th tc nI tI s chy nhanh hn khi
xy dng ngoi ng dng, v tp trung tI server nn d qun l
Theo m hnh lp trnh client-server tt c cc x l iu tp
trung tI server, trong sql server cc x l ny nm trong ttnt
Bi 5: Th tc ni TI(Stored procedure)
2>c php xy dng ttnt
Create Proc Ten_Thu_Tuc [(Cc tham s)]
As
cc cu lnh
Trong :
Cc tham s : chia lm hai loI
Tham s vo : nhn gi tr t ngI dng gI vo cho ttnt
x l
C php : @Ten_bien Kiu_d_liu [=gi tr mt nh]
Tham s ra :nhn kt qu tr v t Ttnt v hin th cho ngI
dng
C php : @Ten_bien Kiu_d_Liu OutPut
Bi 5: Th tc ni TI(Stored procedure)
GI thc hin ttnt
Exec Ten_Thu_Tuc [ @ten_Tham_so_vao= gia_tri[,..]
@ten_Tham_so_ra=@ten_Bien output]
LNH Return trong TTNT:
Trong th tc nt ta c th dng lnh Return tr v kt qu hoc
thot khI th tc
C php :
Return gi tr :thot khI th tc v tr v kt qu
Hoc
Return : Thot khI th tc
GI th tc c gi tr tr v
Exec @ten_bien=Ten_thu_Tuc [ @ten_Tham_so_vao=
gia_tri[,..] @ten_Tham_so_ra=@ten_Bien output]
Bi 5: Th tc ni TI(Stored procedure)
3>Cc dng th tc nI tI :
A. Th tc hin th d liu:
Loi th tc ny c th c tham s vo
Trong n cha cu lnh Select
B. Th tc Tnh Ton :
Loi th tc ny c th c tham s vo,tham s ra, gi tr
tr v
Trong n cha cu lnh T-SQL kim tra ,tnh ton gi tr
tr v
Bi 5: Th tc ni TI(Stored procedure)
C>Th tc Thm d liu vo bng:
Loi th tc ny c tham s vo l tn cc ct c trong bng,
tr cc ct c kiu d liu t tng (identity)
Tham s ra,gi tr tr v :c th c, cho bit vic thm d liu c
thnh cng hay khng
Trong n cha cu lnh T-SQL :
Kim tra rng but d liu duy nht(primary key,unique)
c php :
if Exists (Select * from Ten_Bang where Ten_Cot=@ten_cot)
begin
print thng bo li
set @bien_tra_ve= gi tr lI Hoc Return gi tr li
Return
End
Bi 5: Th tc ni TI(Stored procedure)
Kim tra rng but kha ngoi (Foreign Key)
C php
if not Exists (Select * from Ten_Bang where
Ten_Cot=@ten_cot)
begin
print thng bo lI
set @bien_tra_ve= gi tr lI Hoc Return gi tr li
Return
End
Kim tra rng but Min gi tr (Check)
if @ten_cot khng nm trong min gi tr
begin
print thng bo lI
set @bien_tra_ve= gi tr lI Hoc Return gi tr li
Return
Bi 5: Th tc ni TI(Stored procedure)
Ghi d liu vo bng
C php
Insert into Ten_Bang(Ten_cot1[,]) values( @Ten_cot1[,])
Bi 5: Th tc ni TI(Stored procedure)
d>Th tc Cp nht d liu ca bng:
Loi th tc ny c tham s vo l tn cc ct c trong bng,
Tham s ra,gi tr tr v :c th c, cho bit vic Cp nht d
liu c thnh cng hay khng
Trong n cha cu lnh T-SQL :
Kim tra d liu cp nht c tn ti hay khng
c php :
if not Exists (Select * from Ten_Bang where
Ten_Cot_khoa_chinh=@ten_cot_khoa_chinh)
begin
print thng bo li
set @bien_tra_ve= gi tr lI
Hoc Return gi tr li
Return
End
Bi 5: Th tc ni TI(Stored procedure)
Cp nht d liu vo bng
C php
Update Ten_Bang
Set ten_cot=@tencot [,..]
Where ten_cot_khoa_chinh=@ten_cot_khoa_chinh
Ch : khng cp nht ct lm kha chnh v ct c thuc tnh
identity
Bi 5: Th tc ni TI(Stored procedure)
d>Th tc xa d liu ca bng:
Loi th tc ny c tham s vo l cc ct lm kha chnh trong
bng, Tham s ra,gi tr tr v :c th c, cho bit vic xa d
liu c thnh cng hay khng
Trong n cha cu lnh T-SQL :
Kim tra d liu xa c tn ti trong bng nhiu hay khng
c php :
if Exists (Select * from Ten_Bang_nhieu where
Ten_Cot_khoa_ngoai=@ten_cot_khoa_chinh)
begin
print thng bo li
return
End
Bi 5: Th tc ni TI(Stored procedure)
xa d liu vo bng
C php
Delete from Ten_Bang
Where ten_cot_khoa_chinh=@ten_cot_khoa_chinh
Ch : ngoi cc lnh trn c th cn cc lnh cp nht d liu
ca cc bng lin quan
Bi 5: Th tc ni TI(Stored procedure)
4>Giao tc :(Transaction):
L tp hp cc lnh s c thc hin nu tt c u
thnh cng, nu c mt lnh tht bi ,th s khng c
lnh no c thc hin
V d : giao tc chuyn tin ca ngn hng : chuyn
s lng N t ti khon A sang ti khon B, cc cng
vic c thc hin :
TaiKhoanA=TaiKhoanA-N
TaiKhoanB=TaiKhoanB+N
Hai cng vic ny s c thc hin nu khng c
lnh no gy li
Bi 5: Th tc ni TI(Stored procedure)
C php xy dng 1 giao tc trong SQL Server
Lnh Bt u 1 Giao tc : Begin Tran
Lnh kt thc thnh cng 1 giao tc : Commit Tran
Lnh kt thc tht bi 1 giao tc : Rollback Tran
kim tra cc lnh thc hin c thnh cng hay
khng :truy cp n gi tr ca bin @@Error, nu
@@Error<>0 : tht bi
Bi 5: Th tc ni TI(Stored procedure)
C php :
Begin Tran
< tp cc lnh>
If @@error<>0
begin
print giao tac that bai
Rollback tran
end
Else
Commit tran
Bi 5: Th tc ni TI(Stored procedure)
Th tc ni ti tr v Cursor :Th tc tr v mt Cursor cha
cc dng d liu tha iu kin
C php truyn tham s tr v kiu Cursor :
@Ten_bien Cursor Varying Output
Cc x l :
Bn trong th tc :
Gn gi tr cho Cursor, c php :
Set @Ten_Bien=CurSor [phm vi] [di chuyn][trng thi]
[x l]
For cu lnh Select
M Cursor
Bi 5: Th tc ni TI(Stored procedure)
Ngoi th tc :
Duyt v x l d liu trong Cursor
ng v gii phng Cursor
Bi 7:Trigger
1>Tng quan:
Trigger l mt dng t bit ca th tc ni ti nhng :
Trigger khng c tham s
Khng gi thc hin bng lnh Exec, m t ng kch hot
khi d liu trn bng c lin quan n Trigger c cp nht
Mt Trigger c to cho mt bng v dng kim tra cc
rng but ton vn phc tp hoc cp nht d liu ca cc
bng lin quan
Bi 7:Trigger
2>xy dng Trigger:
C php
Create Trigger Ten_trigger on Ten_Bang/Tn View
For/Instead of Insert[,Update,Delete]
AS
<Tp lnh T-SQL>
Bi 7:Trigger
Trong :
Tn bng/view : l bng/view m trigger c to
Nu Trigger c khai bo vi t kha For :trigger ny s
c kch hot sau khi d liu cp nht vo bng
Nu Trigger c khai bo vi t kha Instead of :trigger ny
s c kch hot trc khi d liu cp nht vo bng,
thng c dng kim tra d liu cp nht trn View
Insert,Update,Delete : Trigger c kch hot ng vi hnh
ng thm,sa ,xa d liu trong bng
Th t kim tra cc rng buc ton vn d liu trong bng :
Trigger Instead of->constraint-> trigger For
Bi 7:Trigger
3>Hai bng tm Inserted v Deleted:
Khi thm d liu vo bng, d liu c thm vo s a vo
bng tm Inserted
Khi xa d liu ra bng, d liu xa s a vo bng tm
Deleted
Thao tc cp nht c x l :
Xa dng d liu c (d liu c s a vo bng Deleted)
Thm dng d liu mi(d liu mi s a vo bng
inserted)
ly d liu va mi cp nht vo bng ta truy cp vo
bng tm Deleted hoc Inserted ,ch truy cp c hai bng ny
trong Trigger
Bi 7:Trigger
4>Cc loi Trigger:
Thng bo li trong Trigger : thng bo li trong trigger ta
dng hm :
Raiserror(Chui thng bo li,16,1)
Khng cho thay i d liu :
Rollback Tran
A>Cc x l trong Trigger kim tra khi thm d liu vo bng
Khai bo bin : trong bng c bao nhiu ct tng ng
khai bo by nhiu bin
Dng cu lnh Select ly d liu t bng Inserted gn cho
cc bin ny
Kim tra rng but ton vn ging th tc ni tai thm dl
Bi 7:Trigger
B>Cc x l trong Trigger kim tra khi Sa d liu vo bng
Kim tra khng cho php cp nht cc ct
If Update(Ten_Cot)
Begin
Raiserror(khng thay i d liu ct Ten_Cot,16,1)
Rollback Tran
end
Khai bo cc bin ly d liu kim tra
Dng cu lnh Select ly d liu mi c cp nht t
bng Inserted , ly d liu trc khi cp nht t bng
Deleted
Bi 7:Trigger
C>Cc x l trong Trigger kim tra khi xa d liu vo bng
Khai bo cc bin ly d liu kim tra
Dng cu lnh Select ly d liu mi xa t bng Deleted
Kim tra rng but ton vn ging th tc ni tai xa dl
I.
A.
To bo co:
nh tn Server vo
y!