Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]
1. TRƯỜNG ĐẠI HỌC ĐÀ LẠT
KHOA TOÁN - TIN HỌC
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU
(Baøi giaûng toùm taét)
NGƯỜI BIÊN SOẠN
TẠ THỊ THU PHƯỢNG
Ñaø Laït 2009
2. M CL C
Chương 1: T ng quan v H qu n tr cơ s d li u .....................................Trang 1
I. Gi i thi u................................................................................................................1
II. C u trúc và thành ph n c a h qu n tr cơ s d li u ............................................2
Chương 2: Xây d ng, qu n lý và khai thác cơ s d li u.........................................5
I. Khái ni m cơ s d li u .........................................................................................5
II. T o cơ s d li u. ...................................................................................................5
III. Ki u d li u. ...........................................................................................................6
IV. T o và qu n lý b ng. .............................................................................................7
V. Các thao tác trên d li u.......................................................................................11
VI. Truy v n d li u ...................................................................................................12
VII. T o và s d ng khung nhìn (View)......................................................................14
VIII. T o và s d ng ch m c (Index)...........................................................................14
IX. Chuy n i d li u v i các ng d ng khác..........................................................18
Chương 3: T-SQL nâng cao ......................................................................................19
I. Khai báo và s d ng bi n .....................................................................................19
II. C u trúc i u khi n...............................................................................................20
III. Th t c thư ng trú (Stored Procedures)...............................................................22
IV. Ki u d li u cursor ...............................................................................................26
V. Hàm ngư i dùng (User Defined Functions).........................................................32
VI. Triggers và cài t ràng bu c d li u ...................................................................35
Chương 4: B o m t và an toàn d li u .....................................................................40
I. B o m t trong h qu n tr cơ s d li u ..............................................................40
II. B n sao d li u .....................................................................................................46
III. Sao lưu và khôi ph c d li u ...............................................................................59
IV. Qu n lý giao d ch .................................................................................................61
Chương 5: L p trình cơ s d li u............................................................................92
I. L p trình ADO.NET.............................................................................................92
II. Thi t k ch c năng c/ ghi d li u .....................................................................95
III. T o báo bi u v i Crystal Report ..........................................................................98
Bài t p ........................................................................................................................105
3. Bài gi ng tóm t t H qu n tr cơ s d li u 1
Chương 1
T NG QUAN V H QU N TR CƠ S D LI U
I. Gi i thi u
Thông tin là ngu n tài nguyên quý giá c a m t t ch c. Các ph n m m máy tính là
nh ng công c hi u qu x lý thông tin và h qu n tr cơ s d li u là công c ph
bi n cho phép lưu tr và rút trích thông tin m t cách hi u qu .
H qu n tr cơ s d li u quan h là h qu n tr cơ s d li u ph bi n nh t hi n nay
và ư c h tr b i nhi u nhà cung c p ph n m m. Tính hi u qu c a các ng d ng ph
thu c vào ch t lư ng c a vi c t ch c d li u. Nh ng c i ti n trong k thu t và x lý cơ
s d li u ưa n các cơ h i s d ng thông tin m t cách linh ho t và hi u qu khi d li u
ư c t ch c và lưu tr trong các c u trúc quan h . H qu n tr cơ s d li u là m t thành
công trong lĩnh v c thương m i.
M c tiêu c a h qu n tr cơ s d li u.
H qu n tr cơ s d li u ph i m b o các m c tiêu sau: d li u s n dùng (data
availability), tính toàn v n d li u (data integrity), an toàn d li u (data secutity), và c
l p d li u (data independency).
o D li u s n dùng (data availability): d li u ư c t ch c sao cho m i ngư i dùng
có th truy c p d dàng theo ch c năng và nhi m v c a h .
o Tính toàn v n d li u (data integrity): d li u lưu tr trong cơ s d li u là úng
n, áng tin c y.
o An toàn d li u (data secutity): Ch nh ng ngư i dùng ư c phép m i có th truy
c p d li u. N u nhi u ngư i dùng truy c p chung m t m c d li u cùng lúc thì h
qu n tr cơ s d li u không cho phép h th c hi n nh ng thay i gây mâu thu n
d li u.
o c l p d li u (data independency): h qu n tr cơ s d li u ph i cho phép t t c
m i ngư i dùng ư c phép lưu tr , c p nh t và rút trích d li u hi u qu mà không
c n n m chi ti t v c u trúc c a cơ s d li u ư c bi u di n và cài t.
Quá trình phát tri n c a h qu n tr cơ s d li u.
Quá trình phát tri n c a DBMS như sau:
− Flat files: 1960s – 1980s
− Hierarchical: 1970s –1990s
− Network : 1970s – 1990s
− Relational: 1980s – n nay
− Object-oriented: 1990s – n nay
4. Bài gi ng tóm t t H qu n tr cơ s d li u 2
− Object-relational: 1990s – n nay
− Data warehousing: 1980s – n nay
− Web-enabled: 1990s – n nay
II. C u trúc và thành ph n c a h qu n tr cơ s d li u.
Forms Application SQL Interface
Front ends
SQL Commands
Query
Parser Plan Executor Execution
Engine
Optimizer Operator Evaluator
Concurrency
Control
File and Access
Transaction Methods
Manager
Recovery
Buffer Manager
Lock Manager
Manager
Disk Space Manager DBMS
Index System DATABASE
Files Data catalog
Files
Hình 1.1 Ki n trúc c a DBMS
Ki n trúc c a h qu n tr cơ s d li u g m 2 thành ph n ch c năng:
o B qu n lý lưu tr (Storage manager).
o B X lý truy v n (Query Processor).
1. B qu n lý lưu tr
B qu n lý lưu tr có nhi m v lưu tr , rút trích và c p nh t d li u vào cơ s d li u. B
qu n lý lưu tr g m có các ơn v sau:
− Ki m tra ch ng th c và toàn v n.
− Qu n lý giao d ch .
− Qu n lý file.
5. Bài gi ng tóm t t H qu n tr cơ s d li u 3
− Qu n lý vùng m.
Qu n lý giao d ch (Transaction management)
Thông thư ng, m t s thao tác trên cơ s d li u t o thành m t ơn v logic công vi c.
Ta hãy xét ví d chuy n kho n, trong ó m t s ti n x ư c chuy n t tài kho n A
(A:=A-x) sang m t tài kho n B (B:=B+x). M t y u t c n thi t là c hai thao tác này ho c
cùng x y ra ho c không ho t ng nào x y ra c . Vi c chuy n kho n ph i x y ra trong
tính toàn th c a nó ho c không. Yêu c u toàn th -ho c-không này ư c g i là tính
nguyên t (atomicity). M t y u t c n thi t khác là s th c hi n vi c chuy n kho n b o
toàn tính nh t quán c a cơ s d li u: giá tr c a t ng A + B ph i ư c b o toàn. Yêu c u
v tính chính xác này ư c g i là tính nh t quán (consistency). Cu i cùng, sau khi th c
hi n thành công ho t ng chuy n kho n, các giá tr c a các tài kho n A và B ph i b n
v ng cho dù có th có s c h th ng. Yêu c u v tính b n v ng này ư c g i là tính lâu
b n (durability).
M t giao d ch là m t t p các ho t ng th c hi n ch m t ch c năng logic trong m t
ng d ng cơ s d li u. M i giao d ch là m t ơn v mang c tính nguyên t l n tính nh t
quán. Như v y, các giao d ch ph i không ư c vi ph m b t kỳ ràng bu c nh t quán nào:
N u cơ s d li u là nh t quán khi m t giao d ch kh i ng thì nó cũng ph i là nh t
quán khi giao d ch k t thúc thành công. Tuy nhiên, trong khi ang th c hi n giao d ch,
ph i cho phép s không nh t quán t m th i. S không nh t quán t m th i này tuy là c n
thi t nhưng l i có th d n n các khó khăn n u x y ra s c .
Trách nhi m c a ngư i l p trình là xác nh úng n các giao d ch sao cho b o toàn
tính nh t quán c a cơ s d li u.
m b o tính nguyên t và tính lâu b n là trách nhi m c a h cơ s d li u nói chung
và c a thành ph n qu n tr giao d ch (transaction-management component ) nói riêng.
N u không có s c , t t c giao d ch hoàn t t thành công và tính nguyên t ư c hoàn
thành d dàng. Tuy nhiên, do s hi n di n c a các s c , m t giao d ch có th không hoàn
t t thành công s th c hi n c a nó. N u tính nguyên t ư c m b o, m t giao d ch th t
b i không gây nh hư ng n tr ng thái c a cơ s d li u. Như v y, cơ s d li u ph i
ư c hoàn l i tr ng thái c a nó trư c khi giao d ch b t u. H qu n tr cơ s d li u ph i
có trách nhi m phát hi n s c h th ng và tr l i cơ s d li u v tr ng thái trư c khi x y
ra s c .
Khi m t s giao d ch tương tranh c p nh t cơ s d li u, tính nh t quán c a d li u có
th không ư c b o toàn, ngay c khi m i giao d ch là chính xác. B qu n tr i u khi n
tương tranh (concurency-control manager) có trách nhi m i u khi n các tương tác gi a
các giao d ch ng th i m b o tính th ng nh t c a CSDL.
6. Bài gi ng tóm t t H qu n tr cơ s d li u 4
Thành ph n Ki m tra ch ng th c và toàn v n (Authorization and Integrity Manager)
Ki m tra ràng bu c toàn v n và quy n truy c p d li u c a ngư i dùng cơ s d li u.
Thành ph n qu n lý giao d ch (Transaction manager)
Thành ph n này m b o r ng cơ s d li u luôn tr ng thái nh t quán. Nó qu n lý vi c
th c thi các yêu c u thao tác d li u và m b o các truy c p d li u ng th i không d n
n mâu thu n.
Thành ph n qu n lý file (File manager): qu n lý vi c c p phát không gian trên ĩa. Các
file ư c dùng ch a t p các d li u tương t nhau. H qu n lý file qu n lý các file c
l p, giúp nh p và l y các m u tin. Thành ph n qu n lý file thi t l p và duy trì danh
sách các c u trúc và ch m c ư c nh nghĩa trong lư c trong. Thành ph n qu n lý
file có th :
o T o file.
o Xóa file.
o C p nh t m u tin trong file.
o L y m t m u tin t m t file.
Thành ph n qu n lý vùng m (Buffer Manager): có trách nhi m chuy n d li u t ĩa
lưu tr vào b nh chính theo yêu c u c a chương trình.
2. B x lý truy v n (Query Processor)
Th c hi n câu truy v n nh n ư c t ngư i dùng qua các giai o n phân tích (parser), t i
ưu hóa câu h i (query optimizer), l p k ho ch th c hi n (plan executor) và th c hi n tính
toán (operator evaluator).
7. Bài gi ng tóm t t H qu n tr cơ s d li u 5
Chương 2
XÂY D NG, QU N LÝ VÀ KHAI THÁC CƠ S D LI U
I. Khái ni m cơ s d li u
• m c logic, m t cơ s d li u (CSDL) g m:
− Các b ng (tables) ch a d li u có c u trúc và các ràng bu c (constraint) nh nghĩa
trên các b ng.
− Các khung nhìn (view).
− Các th t c/ hàm.
− Các vai trò (role) và ngư i dùng (user).
− …
• m c lưu tr v t lý, m t database c a SQL Server ư c lưu tr b i 3 lo i t p tin:
− T p tin d li u (data file) g m có:
1 t p tin d li u chính (primary data file), thư ng có ph n m r ng “mdf”: ch a
các d li u kh i u c a database.
0-n t p tin d li u th c p (secondary data file), thư ng có ph n m r ng
“ndf”: ch a các d li u không lưu tr h t trong t p tin d li u chính.
− T p tin nh t ký giao tác (transaction log file) g m có 1-n t p tin nh t ký, thư ng có
ph n m r ng “ldf”: ch a các thông tin v nh t ký giao tác, dùng ph c h i
database sau khi x y ra s c .
II. T o cơ s d li u
1. Cú pháp l nh t o CSDL
Create Database database_name
[ On [Primary]
{ file_spec [,…n] }
]
[ Log on
{ file_spec [,…n] }
]
v i
file_spec :: = ( Name = logical_file_name,
Filename = 'os_file_name '
8. Bài gi ng tóm t t H qu n tr cơ s d li u 6
[ , Size = size ]
[ , Maxsize = { max_size | Unlimited } ]
[ , Filegrowth = growth_increment ] )
M c nh, các t p tin d li u và log ư c lưu trong thư m c MSSQL Data c a thư m c
cài t SQL Server.
Ví d
• Ví d 1: t o CSDL QLSinhVien theo các quy nh m c nh c a SQL Server
Create Database QLSinhVien
• Ví d 2: t o CSDL QLSinhVien v i khai báo tên file logic, thư m c lưu t p tin d li u
chính, kích thư c, …
Create Database QLSinhVien
On
( Name = QLSV_Data
Filename = ‘C: ... QLSV_Data.mdf ’,
Size = 1,
Filegrowth = 10% )
• Ví d 3
Create Database QLSinhVien
On
( Name = QLSV_Data1,
Filename = ‘C: ... QLSV_Data.mdf ’,
Size = 1,
Maxsize = 10 MB,
Filegrowth = 1 MB ) ,
( Name = QLSV_Data2 ,
Filename = ‘C:...QLSV_Data1.ndf’ )
Log on
( Name = QLSV_Log,
Filename = ‘D:...QLSV_Log.ldf’)
2. Xoá m t CSDL ã t n t i
Drop Database database_name
3. Thay i m t CSDL
Alter Database database_name ….
Dùng :
– Thêm/xoá/thay i các t p tin.
– Thay i các tùy ch n cho CSDL.
III. Ki u d li u
SQL Server cung c p các ki u d li u:
1. S
– S nguyên: bit, tinyint, smallint, int, bigint.
9. Bài gi ng tóm t t H qu n tr cơ s d li u 7
– S th c
Floating point:
o float(n)
o real = float(24)
Fixed point
o Decimal(p,s)
o Numeric(p,s)
2. Chu i
char(n): chu i có dài c nh.
nchar(n): chu i (theo mã Unicode) có dài c nh.
varchar(n): chu i có dài thay i.
nvarchar(n): chu i (theo mã Unicode) có dài thay i.
text: ki u d li u cho phép ch a chu i có kích thư c hơn 8KB.
ntext: ki u d li u cho phép ch a chu i (theo mã Unicode) có kích thư c hơn
8KB.
3. Ngày gi
Datetime.
Smalldatetime
4. Ki u ngư i dùng t nh nghĩa
a. nh nghĩa m t ki u d li u:
sp_addtype type_name, system_type [, ‘null_type’][, ‘owner’]
Ví d : nh nghĩa ki u d li u Code là ki u chu i g m 10 ký t cho phép tr ng
Exec sp_addtype Code, char(10), ‘NULL’
b. Xóa m t ki u d li u ngư i dùng nh nghĩa:
sp_droptype ‘type_name’
IV. T o và qu n lý b ng
1. T o b ng
– Xác nh các c t (các thu c tính) c a b ng.
– Xác nh khóa chính.
– Xác nh các thu c tính null/ not null.
– Xác nh thu c tính identity (n u có) (ph i là ki u s nguyên).
Lưu ý:
– Luôn t o khóa chính cho m t b ng.
– Ràng bu c khóa ngo i nên ư c t o sau khi ã t o xong t t c các b ng liên quan.
a. Cú pháp l nh t o b ng
10. Bài gi ng tóm t t H qu n tr cơ s d li u 8
Create table Table_name
(
{ Column_name Data_type [null | not null]
[default default_value ]
[identity [( seed, increment)] ]
} [,…n]
[, constraint constraint_name primary key ( Column_name [,…n] ) ]
)
Ví d : T o b ng h c sinh có khóa chính là (STT, Lop)
Create table HOCSINH
( STT tinyint not null,
Lop char(5) not null default ‘11A1’ ,
HoTen nvarchar(30) not null,
NgaySinh datetime not null,
DiaChi nvarchar(100),
constraint pk_HS primary key (STT, Lop)
)
b. Thay i c u trúc b ng / xóa b ng
Thay i c u trúc b ng là th c hi n:
– Thêm/ xoá/ c p nh t ki u d li u c a m t c t (column).
– Thêm/ xoá/ ki m tra/ không ki m tra ràng bu c (constraint).
– Cho phép/ không cho phép trigger ho t ng.
Cú pháp: Alter table <tên_b ng>
…
Xóa b ng: xoá d li u và c u trúc c a b ng
Cú pháp: Drop table <tên_b ng>
Ví d
− Thêm thu c tính DanToc vào b ng HOCSINH:
Alter table HOCSINH
Add DanToc nvarchar(20) null default ‘Kinh’
− S a ki u d li u c a thu c tính NgaySinh thành ki u SmallDatetime:
Alter table HOCSINH
Alter column NgaySinh SmallDatetime not null
2. Qu n lý b ng
− Các tên b ng, tên ràng bu c không ư c trùng nhau trong cùng m t database.
11. Bài gi ng tóm t t H qu n tr cơ s d li u 9
− Tên các c t trong cùng m t b ng không ư c trùng nhau.
− Thông tin v các b ng, các ràng bu c ư c lưu trong b ng h th ng sysobjects
Ví d : c thông tin v các b ng trong database hi n hành:
Select * from sysobjects where type = ‘U’
− M t s th t c SQL Server cung c p qu n lý b ng và c u trúc b ng:
o sp_databases
o sp_tables [‘table_name’] [, ‘owner’][,‘database_name’][, “ ‘type’ ”]
Ví d : Exec sp_tables null, null, null, “ ‘TABLE’ ”
o sp_help [object_name]
sp_help cho bi t các thông tin v i tư ng b t kỳ trong database ( i tư ng
có ch a trong sysobjects).
Ví d : Exec sp_help HOCSINH
o sp_columns object [, owner] [, database] [,column]
o sp_helpconstraint ‘table_name’
o …
3. Cài t ràng bu c toàn v n ơn gi n
SQL Server cung c p s n cơ ch ki m tra các lo i ràng bu c toàn v n (RBTV) sau:
o Khóa chính (primary key constraint).
o Khóa ngo i (foreign key constraint).
o Giá tr duy nh t (unique constraint).
o Check constraint (Ki m tra ràng bu c mi n giá tr ).
Có th khai báo ràng bu c trong lúc t o b ng ho c khi b ng ã t n t i. Thông thư ng
nên khai báo ràng bu c toàn v n trư c khi nh p d li u.
a. Khai báo ràng bu c trong lúc t o b ng
Cú pháp:
Create table Table_name
( …
[, constraint Constraint_name
{ primary key (Column_name [,…n])
| unique ( Column_name [,…n])
| check ( logical_expression ) }
] […n]
)
Ví d
12. Bài gi ng tóm t t H qu n tr cơ s d li u 10
Create table SinhVien
(
MaSV char(10) not null,
HoTen nvarchar(30) not null,
Nam tinyint,
CMND char(10),
Khoa char(5),
constraint pk_SV primary key (MaSV),
constraint u_CMND unique (CMND),
constraint chk_Nam check (Nam > 0 and Nam <= 4)
)
b. Khai báo ràng bu c trên b ng ã t n t i
Cú pháp:
Alter table table_name
[with check| with nocheck] Add
{ constraint constraint_name
{ primary key ( column_name [,…n] )
| unique ( column_name [,…n] )
| check ( logical_expression )
| foreign key ( column_name [,…n] )
references ref_table ( ref_column [,…n] )
[ on delete {cascade| no action} ]
[ on update {cascade| no action} ]
} [,…n]
Ví d
/* gi s ã t n t i b ng KHOA( MaKhoa, …) */
Alter table SINHVIEN
with check add
constraint u_CMND unique (CMND),
constraint chk_Nam check (Nam in (1, 2, 3, 4) ),
constraint fk_SV_maKhoa foreign key (Khoa),
references KHOA(MaKhoa)
c. Ki m tra / không ki m tra ràng bu c
Cú pháp:
Alter table Table_name
{Check| Nocheck} constraint { All | constraint_name [,…n] }
Ví d :
alter table SINHVIEN
nocheck constraint u_CMND, chk_Nam
d. Xoá ràng bu c
Cú pháp:
13. Bài gi ng tóm t t H qu n tr cơ s d li u 11
Alter table table_name
Drop { [constraint ] constraint_name } [,…n]
Ví d :
Alter table SINHVIEN
drop constraint u_CMND, chk_Nam
e. Rule
− Rule là m t qui nh chung ư c t o ra trong m t CSDL.
− M t rule có th ư c áp d ng cho nhi u thu c tính c a nhi u b ng khác nhau, ho c
cho các ki u d li u ngư i dùng nh nghĩa trong database.
T o rule
Cú pháp:
Create rule rule_name
as logical_expression
(trong ó “logical_expression” ph i ch a m t bi n. Bi n này tương ng v i i tư ng s
ư c áp d ng rule).
Ví d :
create rule r_SoDuong
as @value >0
K t bu c/ g k t bu c rule
K t bu c rule: dùng th t c:
sp_bindrule ‘rule_name’, ‘object’, [ ‘futureonly’ ]
trong ó:
Tùy ch n futureonly ch dùng khi k t bu c rule v i ki u d li u ngư i dùng
nh nghĩa, có nghĩa các c t thu c ki u d li u này trư c ó không b nh
hư ng b i rule.
Ví d : sp_bindrule ‘r_SoDuong’, ‘SinhVien.Nam’
Rule m i k t bu c s ng m g rule cũ trên i tư ng.
G k t bu c
sp_unbindrule ‘object’, [ ‘futureonly’ ]
Ví d : sp_unbindrule ‘SinhVien.Nam’
Xoá rule
Cú pháp: Drop rule {rule_name} [,…n]
Lưu ý: Ch xóa ư c rule khi nó không còn k t bu c v i i tư ng nào.
V. Các thao tác trên d li u
Chú ý khi thêm/ xóa/ c p nh t d li u:
14. Bài gi ng tóm t t H qu n tr cơ s d li u 12
– D li u nh p ph i phù h p v i ki u d li u.
– m b o các ràng bu c toàn v n.
– nh d ng giá tr ki u chu i unicode, ki u datetime.
– Nh p giá tr r ng (Null).
1. Các d ng l nh insert
− Thêm t ng dòng d li u vào b ng
Insert [into] Table_name[ (column_name[,…n] )]
values ( value [,…n] )
− Thêm 0-n dòng d li u t b ng khác/ t k t qu c a m t câu truy v n
Insert [into] Table_name
Select_statement
Lưu ý: trong câu select, ta có th c d li u t các b ng trong database khác.
Khi ó, tên b ng ư c vi t y như sau:
Database_name.Owner.Table_name
Ví d : select * from QLSinhVien.dbo.SinhVien
2. L nh c p nh t d li u
update table_name
set column_name_1= value1,…, column_name_m= value_m
[where conditional_expression]
3. L nh xoá d li u
delete [from] table_name
[where conditional_expression]
VI. Truy v n d li u
1. Câu truy v n t ng quát
Cú pháp t ng quát c a câu truy v n d li u:
SELECT [tính ch t] <danh sách các thu c tính_1>
FROM <danh sách các table ho c query/view [as alias] >
[WHERE < i u ki n_1>]
[GROUP BY <danh sách các thu c tính_2>]
[HAVING < i u ki n_2>]
[ORDER BY <danh sách các thu c tính_3> [ASC | DESC]]
trong ó:
− Tính ch t là m t trong các t khóa: ALL (ch n ra t t c các dòng trong b ng),
DISTINCT (lo i b các dòng trùng l p thông tin), TOP <n> (ch n n dòng u
tiên th a mãn i u ki n).
15. Bài gi ng tóm t t H qu n tr cơ s d li u 13
− Danh sách các thu c tính_1: tên các thu c tính cho bi t thông tin c n l y.
Chú ý:
Các thu c tính cách nhau b i d u ‘,’.
N u l y t t c các thu c tính c a 1 b ng R thì dùng: R.*
N u sau FROM ch có 1 b ng và l y t t c các c t c a b ng ó thì dùng
select *.
N u t n t i 1 thu c tính sau select xu t hi n 2 b ng sau FROM thì ph i
ch nh rõ thu c tính ó thu c b ng nào.
− Danh sách các table/query/view: các b ng, câu truy v n, ho c khung nhìn ch a
thông tin c n l y. Khi tìm ki m thông tin trên nhi u hơn 2 b ng/truy v n thì
ph i k t các b ng l i v i nhau (có th t i u ki n k t t sau where ho c t
trong m nh From… join/ left join/ right join/full join … on …).
− Alias: bí danh (tên t t) c a b ng dùng cho các b ng có tên quá dài, ho c m t
b ng ư c dùng nhi u l n trong m nh from c a câu truy v n.
− i u ki n_1: là i u ki n l c d li u (ch n các b tho i u ki n).
− danh sách các thu c tính_2: d li u s ư c gom nhóm theo các c t này,
ưu tiên tính t trái sang.
− i u ki n_2: i u ki n l c các nhóm theo m t tiêu chí i di n cho c nhóm.
− danh sách các thu c tính_3:s p x p d li u theo c t nào, th t là tăng (ASC)
ho c gi m (DESC). M c nh là d li u ư c s p theo th t tăng d n. Vi c
s p x p ư c th c hi n theo th t ưu tiên t trái qua ph i.
Lưu ý:
N u câu truy v n không có m nh Group By thì cũng không có m nh
Having.
N u câu truy v n có ch a m nh Group By thì Danh sách các thu c tính_1
ch ch a các thu c tính ho c bi u th c liên quan n các thu c tính trong
danh sách các thu c tính_2 và các hàm g p (max, min, avg, sum, count).
2. Các hàm thư ng dùng
− Các hàm g p (Aggregate functions): max, min, sum, avg, count
− Các hàm th i gian.
− Các hàm toán h c.
− Các hàm x lý chu i.
− ….
(Sinh viên có th tra c u theo t khóa trong Books Online).
16. Bài gi ng tóm t t H qu n tr cơ s d li u 14
VII. T o và s d ng khung nhìn (View)
1. Khái ni m khung nhìn:
Khung nhìn (View) là m t b ng o, có c u trúc như m t b ng, khung nhìn không
lưu tr d li u mà d li u c a nó ư c t o ra khi s d ng, khung nhìn là i tư ng
thu c CSDL. Khung nhìn ư c t o ra t câu l nh truy v n d li u (l nh Select), truy
v n t m t ho c nhi u b ng d li u.
2. S d ng khung nhìn
o Khung nhìn ư c s d ng khai thác d li u như m t b ng d li u, có th ư c chia
s b i nhi u ngư i dùng, an toàn trong khai thác.
o Có th th c hi n truy v n d li u trên c u trúc c a khung nhìn.
o Các khung nhìn ư c t o t nhi u b ng ho c trong khung nhìn có ch a t khóa
DISTINCT, hàm g p, m nh group by u không cho phép c p nh t d li u t
khung nhìn vào các b ng g c trong cơ s d li u.
Cú pháp t o khung nhìn:
Create View view_name
As Select_statement
VIII. T o và s d ng ch m c (Index)
Ch m c (Index) là m t ph n quan tr ng i v i CSDL, c bi t là cơ s d li u l n.
Ch m c ư c thi t l p t m t ho c nhi u c t d li u c a b ng d li u. Các giá tr c a Ch
m c s ư c s p x p và lưu tr theo m t danh sách (b ng khác). M i giá tr ch m c là
duy nh t trong danh sách và nó s liên k t n giá tr trong b ng d li u (liên k t d ng con
tr ). Vi c lưu tr d li u c a b ng có khóa ch m c ư c th c hi n theo c u trúc B-Cây
nh m tăng t c truy xu t d li u i v i ĩa (thi t b th c p).
Khi tìm ki m m t giá tr trong c t d li u, mà c t này tham gia t o Ch m c, u tiên
câu l nh xác nh v trí c a giá tr n m trong Ch m c b ng phép duy t cây, sau ó th c
hi n tìm theo liên k t n b n ghi ch a giá tr tương ng v i khóa trong b ng.
1. L a ch n ch m c
• Không có ch m c, h qu n tr CSDL th c hi n truy v n b ng cách duy t qua t ng
dòng trong b ng.
• Cài t các ch m c cho b ng giúp truy v n thông tin nhanh hơn (tìm ki m trên
B-Cây).
• Khóa chính và các ràng bu c unique hi n nhiên là các ch m c c a b ng.
• Cơ s ch n cài t ch m c: d a vào các nhu c u truy v n th c hi n thư ng xuyên
trên CSDL.
17. Bài gi ng tóm t t H qu n tr cơ s d li u 15
• Nên cài t ch m c cho các trư ng h p sau:
– Trư ng h p 1: Có nhu c u truy v n thư ng xuyên các b c a b ng Q theo m t s
(t p) thu c tính nào ó.
Ví d : GiaoDich(MãGD, …,NgàyGD): Có nhu c u truy xu t thư ng xuyên các b
c a giao d ch trong m t ngày ho c trong m t kho ng th i gian nh t nh: cài t
ch m c trên thu c tính NgayGD c a quan h GiaoDich.
– Trư ng h p 2: t p thu c tính tham gia vào phép k t c a m t câu truy v n x y ra
thư ng xuyên.
Ví d : cho 2 lư c quan h :
HocSinh(STT, Lop, HoTen,…)
KetQua(STT, Lop, Mon, Diem)
Thư ng xuyên có nhu c u truy v n: cho bi t k t qu h c t p c a m t h c sinh.
Câu l nh truy v n như sau:
select hs.STT, hs.Lop, hs.HoTen, kq.Mon, kq.Diem
from HocSinh hs join KetQua kq on hs.STT = kq.STT
and hs.Lop = kq.Lop
Cài t ch m c (STT, Lop) cho quan h KetQua
T ng quát: trên mô hình quan h , xác nh các con ư ng truy xu t thư ng
xuyên:
T m t b c a Q1(m t giá tr c th a c a A) có nhu c u truy xu t thư ng
xuyên các b c a Q2 tương ng (tìm ki m các b c a Q2 v i A = a): khai báo ch
m c (A) cho Q2.
Lưu ý: m t ch m c (AB) khác v i hai ch m c (A) và (B).
2. Các lo i ch m c
Có hai lo i ch m c:
– Clustered index
– Nonclustered index
Clustered index:
• D li u th t s ư c s p x p v t lý theo ch m c (th t s n m nút lá c a cây).
• M i b ng ch có th có m t clustered ch m c, thư ng là khóa chính.
18. Bài gi ng tóm t t H qu n tr cơ s d li u 16
Nonclustered index:
• Ch m c logic, d li u th t s không ư c s p x p v t lý theo ch m c.
• Nút lá là con tr tr n v trí c a b d li u, ho c tr n giá tr c a clustered ch m c
(trong trư ng h p b ng có clustered index).
– Không có clustered index:
– Có clustered index
19. Bài gi ng tóm t t H qu n tr cơ s d li u 17
• M t s cân nh c khi ch n ch m c:
– S d ng nhi u ch m c tăng t c truy v n, nhưng làm gi m hi u qu c a các thao
tác thêm/xoá/c p nh t d li u.
– Không nên t o ch m c trên các b ng quá nh (vài trăm dòng).
– Ch nên ch n ch m c mà m i giá tr c a nó tương ng v i m t s ít b . N u m i
giá tr ch m c ng v i trên 20% s lư ng b trong b ng, th c hi n truy v n bình
thư ng b ng cách duy t qua các dòng trong b ng s hi u qu hơn.
– Các giá tr ch m c ph i phân b u các b trong b ng.
– C g ng dùng các ch m c v i s thu c tính ít (chi m ít không gian và c n ít chi phí
duy trì hơn ch m c v i s thu c tính l n).
– Clustered index ph i nh (s thu c tính ít, kích thư c nh ), vì các ch m c
nonclustered u ph i g n k t t i nó.
3. Cài t ch m c v i SQL Server
M t s qui nh:
1. M t b ng có t i a 249 nonclustered ch m c (bao g m c nh ng ch m c ng m
nh khi khai báo khóa chính và ch m c).
2. Kích thư c t i a c a m t ch m c (t ng kích thư c các thu c tính tham gia vào
ch m c) không quá 900 bytes.
3. M c nh: ch m c clustered ư c khai báo ng m nh cùng v i khai báo khóa
chính, các trư ng h p khác là nonclustered (t t nhiên có th ch nh khác i).
Cú pháp khai báo ch m c:
Create [ Unique ][ Cluster| Nonclustered] Ch m c ch m c_name
20. Bài gi ng tóm t t H qu n tr cơ s d li u 18
On {table | view } (column [ Asc | Desc] [ ,...n ])
Ví d :
Create nonclustered ch m c idx_STTHS_Lop
On KETQUA (STTHS, Lop)
Cú pháp xóa ch m c:
Drop Ch m c table_name (ch m c_name)
Ví d :
Drop Ch m c KETQUA(idx_STTHS_Lop)
IX. Chuy n i d li u v i các ng d ng khác
(xem các tài li u hư ng d n th c hành SQL Server kèm theo)
21. Bài gi ng tóm t t H qu n tr cơ s d li u 19
Chương 3
T-SQL NÂNG CAO
I. Khai báo và s d ng bi n
1. Bi n c c b
− Là m t i tư ng có th ch a giá tr thu c m t ki u d li u nh t nh, tên bi n b t
u b ng m t ký t @.
– Bi n c c b có giá tr trong m t query batch ho c trong m t th t c thư ng trú
(stored procedure) ho c hàm (function).
– Khai báo bi n c c b b ng l nh declare: cung c p tên bi n và ki u d li u:
Declare tên_bi n Ki u_d _li u
Ví d :
Declare @MaSinhVien char(10)
Declare @HoTen nvarchar(30)
Declare @Sum float, @Count int
– gán giá tr cho m t bi n c c b dùng l nh set. Giá tr gán cho bi n ph i phù h p
v i ki u d li u c a bi n.
Set tên_bi n = giá_tr
Set tên_bi n = tên_bi n
Set tên_bi n = bi u_th c
Set tên_bi n = k t_qu _truy_v n
Ví d :
Set @MaLop = ‘TH2001’
Set @SoSV = (select count (*) from SinhVien)
Set @MaLop = ‘TH’+Year(@NgayTuyenSinh)
ưa k t qu truy v n vào bi n:
SV(MaSV: int; HoTen: nvarchar(30), Tuoi int)
Select @Var1 = HoTen, @Var1 = Tuoi from SV
where MaSV = 1
Lưu ý: n u câu truy v n tr v nhi u dòng, các bi n ch nh n giá tr tương ng c a dòng
u tiên.
2. Bi n toàn c c
– Là các bi n h th ng do SQL Server cung c p, tên bi n b t u b ng 2 ký t @
– SQL t c p nh t giá tr cho các bi n này, ngư i s d ng không th gán giá tr tr c
ti p.
− M t s bi n h th ng thu ng dùng
o @@error: thông báo mã l i, n u @@error = 0: thao tác th c hi n thành công.
22. Bài gi ng tóm t t H qu n tr cơ s d li u 20
o @@rowcount: cho bi t s dòng b nh hư ng b i l nh cu i (insert, update,
delete).
o @@trancount: cho bi t s giao d ch ang ho t ng trên k t n i hi n t i.
o @fetch_status: cho bi t thao tác l y d li u t cursor có thành công không.
II. C u trúc i u khi n
1. L nh If…else
− Ch c năng: xét i u ki n quy t nh nh ng l nh T-SQL nào s ư c th c hi n
− Cú pháp:
If bi u_th c_ i u ki n
L nh| Kh i_l nh
[Else L nh| Kh i_l nh]
Kh i l nh là m t ho c nhi u l nh n m trong c p t khóa begin…end
Ví d : xét 2 lư c quan h (L QH)
HocPhan(MaHP, TenHP, SiSo)
DangKy(MaSV, MaHP)
Vi t l nh thêm m t ăng ký m i cho sinh viên có mã s 001 vào h c ph n HP01
(gi s h c ph n này ã t n t i trong b ng HocPhan). L i gi i như sau:
Declare @SiSo int
select @SiSo = SiSo from HocPhan where MaHP= ‘HP01’
if @SiSo < 50
Begin
insert into DANG_KY(MaSV, MaHP)
values(‘001’, ’HP01’)
print N’ ăng ký thành công’
End
Else
print N’H c ph n ã SV’
2. L nh While
− Ch c năng: th c hi n l p l i m t o n l nh T-SQL khi i u ki n còn úng.
− Cú pháp:
23. Bài gi ng tóm t t H qu n tr cơ s d li u 21
While bi u_th c_ i u_ki n
L nh| Kh i l nh
– Có th s d ng Break và Continue trong kh i l nh c a while
Break: thoát kh i vòng while hi n hành.
Continue : tr l i u vòng while, b qua các l nh sau ó.
Ví d : xét lư c quan h SinhVien(MaSV: int, HoTen: nvarchar(30))
Vi t l nh xác nh m t mã sinh viên m i theo qui nh: mã sinh viên tăng d n, n u
có ch tr ng thì mã m i xác nh s chèn vào ch tr ng ó. Ch ng h n, n u trong
b ng sinhvien ã có các mã sinh viên 1, 2, 3, 7 mã sinh viên m i là 4.
Gi i:
Declare @STT int
Set @STT = 1
While exists(select * from SV where MaSV = @STT)
set @STT = @STT+1
Insert into SV(MaSV, HoTen) values(@STT, ‘Nguyen Van A’)
3. L nh Case
− Ch c năng: ki m tra m t dãy các i u ki n và tr v k t qu phù h p v i i u ki n
úng. L nh case ư c s d ng như m t hàm trong câu select.
− Cú pháp: Có hai d ng:
D ng 1 (simple case):
Case Bi u_th c_ u_vào
When Giá_tr then k t_qu
[...n]
[ Else k t_qu _khác]
End
D ng 2 (searched case):
Case
When bi u_th c_ i u ki n then k t_qu
[...n]
[ Else k t_qu _khác]
End
Ví d : xét L QH NHAN_VIEN(MaNV, HoTen, NgaySinh, CapBac,Phai)
24. Bài gi ng tóm t t H qu n tr cơ s d li u 22
Cho bi t nh ng nhân viên n tu i ngh hưu bi t r ng tu i v hưu c a nam là 60, c a
n là 55).
Gi i:
select * from NHAN_VIEN
where datediff(yy, NgaySinh, getdate()) > =
Case Phai
when ‘Nam’ then 60
when ‘Nu’ then 55
End
Cho bi t mã NV, h tên và lo i nhân viên (c p b c <=3:bình thư ng, c p b c = null:
chưa x p lo i, còn l i: c p cao).
Gi i:
Select MaNV, HoTen, ‘Loai’ = Case
when CapBac<=3 then ‘Binh Thuong’
when CapBac is null then ‘Chua xep loai’
else ‘Cap Cao’ End
From NhanVien
III. Th t c thư ng trú (Stored Procedures)
1. Khái ni m
Th t c thư ng trú (Stored Procedures - SP) ch a các l nh T_SQL. Tương t như m t
th t c trong các ngôn ng l p trình, SP trong SQL Server có th truy n tham s , có tính
tái s d ng. Các th t c này ư c d ch và lưu tr thành m t i tư ng trong CSDL.
Ý nghĩa:
− Tính tái s d ng, tính uy n chuy n nh h th ng tham s .
− Khi biên d ch SP, các l nh trong c a nó ư c t i ưu hóa nó sao cho th c thi hi u
qu nh t. K t qu t i ưu hóa ư c lưu b n v ng. Khi g i th c thi th t c không c n
biên d ch và t i ưu hóa l i l i g i th t c ti t ki m th i gian và tài nguyên hơn
kh i l nh tương ương thân th t c.
− Trong ng d ng tri n khai theo môi trư ng client/server, client g i l i g i SP lên
server thì chi m ư ng truy n ít hơn r t nhi u l n so v i vi c g i kh i l nh tương
ương trong thân th t c Gi m kh i lư ng thông tin trao i khi ng d ng g i
yêu c u th c hi n công vi c v cho server do ó tránh ngh n ư ng truy n, gi m
trì tr .
25. Bài gi ng tóm t t H qu n tr cơ s d li u 23
− óng gói ch các thao tác cho phép trên CSDL vào các SP và quy nh truy xu t
d li u ph i thông qua SP. Ngoài ra còn có th phân quy n trên SP H tr t t
hơn cho vi c m b o an toàn (security) cho CSDL.
− SP giúp cho vi c k t xu t báo bi u b ng Crystal Report tr nên ơn gi n và hi u
qu hơn r t nhi u so v i vi c k t xu t d li u tr c ti p t các b ng và khung nhìn.
2. Khai báo và s d ng th t c
Cú pháp khai báo:
Create {proc | procedure} procedure_name
{Parameter_name DataType [=default] [output] }[,…n]
As
{ kh i l nh }
Go
Lưu ý:
Tên tham s t theo qui t c như tên bi n c c b .
Giá tr tr v c a SP dùng m t (hay m t s ) tham s output.
Ví d :
− Xây d ng SP cho bi t danh sách sinh viên c a m t l p có mã cho trư c
Create proc DS_Lop @MaLop varchar(10)
As
Select SV.MaSV, SV.HoVaTen, SV.NgaySinh
From SinhVien SV where SV.Lop = @MaLop
Go
− Xây d ng SP tính toán giá tr cho ơn hàng có mã cho trư c v i quan h
DonHang như sau:
DonHang(Ma, SoLuong, DonGia, ThueSuat, ChietKhau, ThanhTien)
Create proc TongTien @MaDH varchar(10)
As
Declare @ThanhTien float
Declare @TienThue float
Declare @TienChietKhau float
Declare @DonGia float,@SoLuong int
Set @SoLuong = (select SoLuong from DonHang where Ma = @MaDH)
26. Bài gi ng tóm t t H qu n tr cơ s d li u 24
Set @DonGia = (select DonGia from DonHang where Ma = @MaDH)
Set @TienThue = (select ThueSuat from DonHang where Ma = @MaDH)
Set @TienChietKhau = (select ChietKhau from DonHang
where Ma = @MaDH)
Set @ThanhTien = @DonGia*@SoLuong
Set @TienThue = @ThanhTien*@TienThue/100
Set @ThanhTien = @ThanhTien + @TienThue
Set @TienChietKhau = @ThanhTien*@TienChietKhau/100
Set @ThanhTien = @ThanhTien - @TienChietKhau
Update DonHang set ThanhTien = @ThanhTien where Ma = @MaDH
Go
− Vi t th t c thêm m t ăng ký c a sinh viên vào m t h c ph n (t ng quát ví d
trong ph n If …else)
Create procedure usp_ThemDangKy
@MaSV char(5), @MaHP char(5),
@SiSo int = 0 output
As
select @SiSo = SiSo from HocPhan where MaHP= @MaHP
if @SiSo < 50
Begin
insert into DANG_KY(MaSV, MaHP)
values(@MaSV, @MaHP)
set @SiSo = @SiSo+1
return 1
End
return 0
Go
- Xây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c.
Gi s có các quan h như sau:
SinhVien (MaSV, HoTen, DTB, XepLoai, Lop)
MonHoc (MaMH, TenMH)
KetQua (MaMH, MaSV, LanThi, Diem)
trong ó:
27. Bài gi ng tóm t t H qu n tr cơ s d li u 25
− i m thi ch tính l n thi sau cùng.
− X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9],
Y u [0,4.9].
− K t qu xu t d ng tham s output, không ghi xu ng CSDL.
Gi i
Create proc XepLoaiSV @MaSV varchar(10), @DTB float out put,
@XL nvarchar(20) out put
As
Set @DTB = (Select avg(Diem) from KetQua Kq
Where MaSV = @MaSV
and not exists (select * from KetQua Kq1
where Kq1.MaSV = @MaSV
and Kq1.MaMH=Kq.MaMH
and Kq1.LanThi > Kq.LanThi))
If @DTB >= 9
Set @XL = N’Xu t s c’
Else if @DTB >= 8
Set @XL = N’Gi i’
Else if @DTB >= 7
Set @XL = N’Khá’
Else if @DTB >= 5
Set @XL = N’Trung bình’
Else
Set @XL = N’Y u’
Go
Cú pháp g i th c hi n th t c:
EXEC| EXECUTE
{ [ @return_status = ] procedure_name
{ [ @parameter _name = ] value [ OUTPUT ] } [ ,...n ]
Lưu ý:
o Khi g i th c hi n SP, dùng t khóa Exec và c n truy n tham s v i ki u d li u
phù h p và th t chính xác như khai báo trong nh nghĩa SP.
o Có th truy n giá tr cho tham s u vào (input) là m t h ng ho c m t bi n ã
gán giá tr , không truy n ư c m t bi u th c.
o nh n ư c giá tr k t qu (thông qua tham s u ra), c n truy n vào m t bi n
và có t khóa output.
Ví d :
o G i th t c usp_ThemDangKy:
28. Bài gi ng tóm t t H qu n tr cơ s d li u 26
Exec usp_ThemDangKy ‘001’, ’HP01’
ho c
Exec usp_ThemDangKy @MaHP = ‘HP01’, @MaSV = ‘001’
o G i th t c usp_ThemDangKy có nh n k t qu u ra:
Declare @SiSo int
Exec usp_ThemDangKy ‘001’,’HP01’, @SiSo output
Print @SiSo
o G i th t c usp_ThemDangKy có nh n k t qu u ra và k t qu tr v t th
t c:
Declare @SiSo int, @KetQua int
Exec @KetQua = usp_ThemDangKy ‘001’,’HP01’, @SiSo output
o G i th c hi n th t c x p lo i sinh viên:
Declare@MaSinhVien varchar(10)
Declare@DiemTB varchar(10)
Declare@XepLoai varchar(10)
Set@MaSinhVien = ‘0712345’
Exec XepLoaiSV @MaSinhVien,@DiemTB out put,@XepLoai out put
Exec XepLoaiSV ‘0713478’, @DiemTB out put,@XepLoai out put
S a th t c
Thay t khóa Create trong l nh t o th t c b ng t khóa Alter.
Xóa th t c
Drop {procedure|proc} procedure_name
Ví d : Drop procedure usp_ThemDangKy
3. Stored procedure h th ng
− Là nh ng th t c do SQL Server cung c p s n th c hi n các công vi c: qu n lý
CSDL, qu n lý ngư i dùng, c u hình CSDL,…
− Các th t c này có tên b t u b ng “sp_” Khi xây d ng th t c, tránh t tên
th t c b t u v i “sp_”.
IV. Ki u d li u cursor
1. Khái ni m Cursor
- Là m t c u trúc d li u ánh x n m t t p các dòng d li u k t qu c a m t câu
truy v n (select).
29. Bài gi ng tóm t t H qu n tr cơ s d li u 27
- Cho phép duy t tu n t qua t p các dòng d li u và c giá tr t ng dòng.
- Th hi n c a cursor là 1 bi n, nhưng tên bi n này không b t u b ng ’@’.
- V trí hi n hành c a cursor có th ư c dùng như i u ki n trong m nh where
c a l nh update ho c delete: cho phép c p nh t/xoá d li u (d li u th t s trong
CSDL) tương ng v i v trí hi n hành c a cursor.
2. Khai báo và s d ng Cursor
Khai báo Cursor
Có th s d ng cú pháp chu n SQL 92 ho c cú pháp T_SQL m r ng.
− Cú pháp SQL 92 chu n:
Declare cursor_name [Insensitive] [Scroll] Cursor
For select_statement
[ For {Read only| Update [of column_name [,…n] ] }]
− Cú pháp T_SQL m r ng
Declare cursor_name Cursor
[ Local | Global ]
[ Forward_only| Scroll]
[ Static| Dynamic]
[ Read_only]
For select_statement
[ For Update [ of column_name [,…n] ] ]
Lưu ý: Tên cursor trong các cách khai báo không b t u b ng ký t “@”.
Ý nghĩa các tham s tùy ch n trong khai báo:
o Insensitive/ static: n i dung c a cursor không thay i trong su t th i gian t n t i,
trong trư ng h p này cursor ch là read only.
o Dynamic: trong th i gian t n t i, n i dung c a cursor có th thay i n u d li u
trong các b ng liên quan có thay i.
o Local: cursor c c b , ch có th s d ng trong ph m vi m t kh i (query batch)
ho c m t th t c/ hàm.
o Global: cursor toàn c c, có th s d ng trong m t th t c/hàm hay m t query
batch b t kỳ ho c n khi b h y m t cách tư ng minh.
o Forward_only: cursor ch có th duy t m t chi u t u n cu i.
o Scroll: có th duy t lên xu ng cursor tùy ý (duy t theo a chi u).
30. Bài gi ng tóm t t H qu n tr cơ s d li u 28
o Read only: ch có th c t cursor, không th s d ng cursor update d li u
trong các b ng liên quan (ngư c l i v i “for update…” ).
M c nh khi khai báo cursor n u không ch ra các tùy ch n thì cursor có các tính ch t:
- Global
- Forward_only
- Read only hay “for update” tùy thu c vào câu truy v n
- Dynamic
Duy t cursor
Dùng l nh Fetch duy t tu n t qua cursor theo cú pháp:
Fetch
[ [Next| Prior| First| Last| Absolute n| Relative n]
From ] Tên_cursor
[Into Tên_bi n [,…n] ]
−M c nh: fetch next.
− i v i cursor d ng forward_only, ch có th fetch next.
− Bi n h th ng @@fetch_status cho bi t l nh fetch v a th c hi n có thành công hay
không, giá tr c a bi n này cơ s bi t ã duy t n cu i cursor hay chưa.
Quy trình s d ng Cursor
− Khai báo cursor.
− “M ” cursor b ng l nh Open
Open tên_cursor
− Khai báo các bi n t m ch a ph n t hi n hành ( ang ư c x lý) c a cursor:
Các bi n t m ph i cùng ki u d li u v i các trư ng tương ng c a ph n t
trong cursor.
Có n trư ng trong ph n t c a cursor thì ph i có n bi n t m tương ng.
− Fetch (next,…) cursor chuy n n v trí phù h p:
Có th ưa các giá tr c a dòng hi n hành vào các bi n thông qua m nh into
c a l nh fetch.
N u không có m nh into, các giá tr c a dòng hi n hành s ư c hi n th ra
c a s k t qu (result pane) sau l nh fetch.
Có th s d ng v trí hi n t i như là i u ki n cho m nh where c a câu
delete/ update (n u cursor không là read_only).
31. Bài gi ng tóm t t H qu n tr cơ s d li u 29
− L p l i vi c duy t và s d ng cursor, có th s d ng bi n @@fetch_status bi t ã
duy t qua h t cursor hay chưa. @@FETCH_STATUS = 0 : l y d li u thành công,
@@FETCH_STATUS < 0 : không l y ư c d li u.
− óng cursor b ng l nh Close
Close Tên_cursor
Lưu ý: Sau khi óng, v n có th m l i n u cursor chưa b h y.
− H y cursor b ng l nh deallocate
Deallocate Tên_cursor
Ví d : xét hai L QH
SINHVIEN (MaSV, HoTen, MaKhoa)
KHOA(MaKhoa, TenKhoa)
Duy t và c giá tr t cursor
C p nh t l i giá tr MaSV = Vi t t t tên Khoa + MaSV hi n t i cho t t c sinh viên:
declare cur_DSKhoa cursor
for select MaKhoa, TenKhoa from Khoa
open cur_DSKhoa
declare @MaKhoa int,
@TenKhoa varchar(30), @TenTat varchar(5)
fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa
while @@fetch_status = 0
begin
-- xác nh tên t t c a Khoa d a vào @TenKhoa…
update SinhVien set MaSV = @TenTat+MaSV
Where MaKhoa = @MaKhoa
fetch next from cur_DSKhoa into @MaKhoa, @TenKhoa
end
Close cur_DSKhoa
Deallocate cur_DSKhoa
Dùng cursor xác nh dòng c p nh t
32. Bài gi ng tóm t t H qu n tr cơ s d li u 30
declare cur_DSKhoa cursor scroll
for select MaKhoa, TenKhoa from Khoa
open cur_DSKhoa
fetch absolute 2 from cur_DSKhoa
if (@@fetch_status = 0)
update Khoa
set TenKhoa = ‘aaa’
where current of cur_DSKhoa
Close cur_DSKhoa
Deallocate cur_DSKhoa
3. Bi n cursor
− Ta có th khai báo m t bi n ki u cursor và gán cho nó tham chi u n m t
cursor ang t n t i.
− Bi n cursor có th ư c xem như là con tr cursor.
− Bi n cursor là m t bi n c c b .
− Bi n cursor sau khi gán giá tr ư c s d ng như m t cursor thông thư ng.
Ví d :
Declare @cur_var cursor
set @cur_var = my_cur -- my_cur là m t cursor ang t n t i
ho c:
Declare @cur_var cursor
set @cur_var = cursor for select_statement
K t h p cursor v i stored procedure
Xây d ng SP tính i m trung bình và x p lo i cho sinh viên thu c l p cho trư c. Gi s
có các quan h như sau:
SinhVien (MaSV, HoTen, DTB, XepLoai, Lop)
MonHoc (MaMH, TenMH)
KetQua (MaMH, MaSV, LanThi, Diem)
Bi t r ng
i m thi ch tính l n thi sau cùng
X p lo i: Xu t s c [9, 10], Gi i [8, 8.9], Khá [7, 7.9], Trung bình [5.0, 6.9], Y u
[0, 4.9].
K t qu ghi xu ng CSDL, ng th i xu t ra t ng s sinh viên x p lo i gi i c a l p
ó.
• Phân tích ví d :
33. Bài gi ng tóm t t H qu n tr cơ s d li u 31
o L p c n xét có nhi u sinh viên, t ng sinh viên c n ư c x lý thông qua 3 bư c:
Tính i m trung bình cho sinh viên, i m trung bình ph i là i m c a l n thi
sau cùng. Có th tái s d ng th t c XepLoaiSVLop.
D a vào i m trung bình c a sinh viên xác nh x p lo i.
C p nh t i m và x p lo i vào b ng sinh viên.
o M i sinh viên u l p l i 3 bư c trên.
T phân tích trên ta th y:
C n x lý nhi u ph n t (các sinh viên).
M i ph n t x lý tương i ph c t p (truy v n, tính toán, g i th t c khác,
i u ki n r nhánh, c p nh t d li u, …).
Cách x lý các ph n t là như nhau.
⇒ S d ng cursor là thích h p
Cursor ch a các sinh viên c a l p c n xét, ch c n ch a mã sinh viên là ư c.
• Xây d ng th t c
Create procedure XepLoaiSVLop
@Lop nvarchar(10), @SoSVGioi int out
As
Declare @DTB float
Declare @XepLoai nvarchar(20)
Declare @MaSV nvarchar(10)
Declare cur_SV cursor
For (select MaSV from SinhVien where Lop=@Lop)
Open cur_SV
Fetch Next from cur_SV into @MaSV
While @@FETCH_STATUS = 0
Begin
Exec XepLoaiSV @MaSV, @DTB output, @XepLoai output
Update SinhVien set DTB = @DTB, XepLoai=@XepLoai
Where MaSV = @MaSV
Fetch Next from cur_SV into @MaSV
End
Close cur_SV
Deallocate cur_SV
34. Bài gi ng tóm t t H qu n tr cơ s d li u 32
Set @SoSVGioi = (select count(*) from sinhvien
where lop = @Lop and XepLoai = N’Gi i’)
Go
V. Hàm ngư i dùng (User Defined Functions)
1. Khái ni m hàm ngư i dùng
• Gi ng stored procedure:
− mã l nh có th tái s d ng.
− Ch p nh n các tham s input.
− Biên d ch m t l n và t ó có th g i khi c n.
• Khác stored procedure:
− Ch p nh n nhi u ki u giá tr tr v (ch m t giá tr tr v ).
− Không ch p nh n tham s output.
− Khác v cách g i th c hi n.
• Có th xem hàm ngư i dùng thu c v 3 lo i tùy theo giá tr tr v c a nó:
− Giá tr tr v là ki u d li u cơ s (int, varchar, float, datetime…).
− Giá tr tr v là Table có ư c t m t câu truy v n.
− Giá tr tr v là table mà d li u có ư c nh tích lũy d n sau m t chu i thao
tác x lý và insert.
2. Khai báo và s d ng
Khai báo hàm ngư i dùng
Lo i 1: Giá tr tr v là ki u d li u cơ s
Create function func_name
( {parameter_name DataType [= default ] } [,…n])
returns DataType
As
Begin
…
Return {value | variable | expression}
End
Ví d :
35. Bài gi ng tóm t t H qu n tr cơ s d li u 33
Create function SoLonNhat
(@a int,@b int,@c int) return int
As
Begin
declare @max int
set @max = @a
if @b > max set @max = @b
if @c > max set @max = @c
return @max
End
Lo i 2: Giá tr tr v là m t b ng có ư c t m t câu truy v n
Create function func_name
( {parameter_name DataType [= default ] } [,…n])
returns Table
As
Return [ ( ]select_statement [ ) ]
Go
Ví d : Vi t hàm in danh sách các m t hàng c a m t mã ơn hàng cho trư c
Create function DanhSachMatHang
( @MaDonHang varchar(10) ) returns Table
As
Return
(Select MH.TenHang,MH.DonGia
From ChiTietDH CT, MatHang MH
Where CT.MaDH = @MaDonHang
and CT.MaMH = MH.MaMH)
Go
Lo i 3: Giá tr tr v là m t b ng mà d li u có ư c nh tích lũy d n sau m t chu i
thao tác x lý và insert.
36. Bài gi ng tóm t t H qu n tr cơ s d li u 34
Create function func_name
( {parameter_name DataType [= default ] } [,…n])
returns TempTab_name Table(Table_definition)
As
Begin
…
Return
End
Go
Ví d :
Create function DanhSachLop ()
returns @DS Table(@MaLop varchar(10),@SoSV int)
As
--các x lý insert d li u vào b ng DS
return
Go
Lưu ý: Trong thân hàm không ư c s d ng các hàm h th ng b t nh (Built-in
nondeterministic functions ), bao g m :
− GETDATE
− GETUTCDATE
− NEWID
− RAND
− TEXTPTR
− @@TOTAL_ERRORS, @@CPU_BUSY, @@TOTAL_READ, @@IDLE,
@@TOTAL_WRITE, @@CONNECTIONS …
S d ng hàm ngư i dùng
Các hàm ngư i dùng ư c s d ng trong câu truy v n, trong bi u th c… phù h p ki u
d li u tr v c a nó.
Ví d :
− Select dbo.SoLonNhat(3,5,7)
− Select * from DanhSachLop()
Lưu ý:
− N u dùng giá tr m c nh c a tham s , ph i dùng t khóa default.
37. Bài gi ng tóm t t H qu n tr cơ s d li u 35
− Khi g i hàm lo i 1 (tr v giá tr cơ b n), ph i có tên owner c a hàm i kèm (ví d
dbo.SoLonNhat(5,8,-10)).
Thay i hàm ngư i dùng
Thay t khóa create trong các l nh t o hàm b ng t khóa alter
Xóa hàm ngư i dùng
Drop function tên_hàm_c n _xóa
Ví d :
Drop function DanhSachMatHang
3. Các hàm h th ng
Ngoài các hàm do ngư i dùng nh nghĩa, SQL Server còn cung c p các hàm xây
d ng s n c a h th ng. Các hàm này cung c p ti n ích như x lý chu i, x lý th i
gian, x lý s h c…
Sinh viên tìm hi u thêm v các hàm này trong Books on-line và các tài li u tham kh o.
• t o hàm h th ng c n ti n hành theo các bư c sau:
T o hàm trong cơ s d li u Master
Tên hàm b t u b i fn_functionName
Thay i ch nhân c a hàm b ng th t c sp_changeobjectowner như sau:
EXEC sp_changeobjectowner ‘fn_ functionName’ , ‘system_function_schema’
Ví d : T o hàm h th ng th c chuy n i m t bi n ki u ngày tháng sang ki u chu i.
--T o hàm fn_doingay
create function fn_doingay(@ngay datetime)
returns char(10)
as
begin
return convert(nchar(10),@ngay,103)
end
--Thay i ch nhân c a hàm
EXEC sp_changeobjectowner 'fn_doingay' , 'system_function_schema'
Sau l nh này hàm fn_doingay có th dùng ư c cho CSDL b t kỳ.
Select manv, hoten, fn_doingay(ngaysinh)
From nhanvien
VI. Triggers và cài t ràng bu c d li u
1. Gi i thi u
• Trigger là m t lo i stored procedure c bi t có các c i m sau:
38. Bài gi ng tóm t t H qu n tr cơ s d li u 36
− T ng th c hi n khi có thao tác insert, delete ho c update trên d li u.
− Thư ng dùng ki m tra các ràng bu c toàn v n c a CSDL ho c các qui t c
nghi p v .
− M t trigger ư c nh nghĩa trên m t b ng, nhưng các x lý trong trigger có
th s d ng nhi u b ng khác.
• X lý c a trigger thư ng c n s d ng n hai b ng t m:
− Inserted: ch a các dòng v a m i ư c thao tác insert/ update thêm vào b ng.
− Deleted: ch a các dòng v a m i b xóa kh i b ng b i thao tác update/delete.
Lưu ý: update = delete dòng ch a giá tr cũ + insert dòng ch a giá tr m i
− Inserted và deleted là các b ng trong b nh chính:
C c b cho m i trigger.
Có c u trúc gi ng như b ng (table) mà trigger nh nghĩa trên ó
Ch t n t i trong th i gian trigger ang x lý.
− N u thao tác insert/ delete/ update th c hi n trên nhi u dòng, trigger cũng ch
ư c g i m t l n B ng inserted/ deleted có th ch a nhi u dòng.
2. S d ng Trigger
Khai báo trigger
− Cú pháp:
Create trigger tên_trigger
On {tên_b ng|tên_view}
{For| After| Instead of } { [delete] [,] [insert] [,] [update] }
As
{ các l nh T-sql }
Go
rong ó:
For | After:
− Trigger ư c g i th c hi n sau khi thao tác delete/ insert/ update tương ng ã ư c
th c hi n thành công:
Các dòng m i ư c thêm ch a ng th i trong b ng d li u và b ng inserted.
Các dòng b xoá ch n m trong b ng deleted ( ã b xoá kh i b ng d li u).
− Có th x lý quay lui thao tác ã th c hi n b ng l nh rollback transaction.
Instead of:
− Trigger ư c g i th c hi n thay cho thao tác delete/ insert/ update tương ng:
39. Bài gi ng tóm t t H qu n tr cơ s d li u 37
Các dòng m i ư c thêm ch ch a trong b ng inserted.
Các dòng b ch nh xoá n m ng th i trong b ng deleted và b ng d li u (d
li u không b xoá).
− Trigger Instead of thư ng ư c dùng x lý c p nh t trên khung nhìn.
Lưu ý:
− L nh t o trigger ph i là l nh u tiên trong m t query batch.
− Trên m t b ng có th nh nghĩa nhi u trigger for/after cho m i thao tác nhưng ch
có th nh nghĩa m t trigger instead of cho m i thao tác.
− Không th nh nghĩa trigger instead of update/ delete trên b ng có cài t khóa
ngo i d ng update cascade/ delete cascade.
− Trong thân trigger, có th s d ng hàm Update(tên_c t) ki m tra xem vi c c p
nh t ư c th c hi n trên c t nào.
Update(tên_c t) = true : có th c hi n c p nh t trên c t tên_c t
S d ng trigger cài t m t s lo i ràng bu c
Ví d 1- Ràng bu c liên thu c tính – liên quan h
Cho CSDL:
DatHang(MaPDH, NgayDH,…)
GiaoHang(MaPGH, MaPDH, NgayGH,…)
Ràng bu c: Ngày giao hàng không th nh hơn ngày t hàng tương ng
B ng t m nh hư ng:
Thêm Xóa S a
DatHang - - + (NgayDH)
GiaoHang + - + (NgayGH, MaPDH)
C n cài t trigger cho thao tác s a trên b ng DatHang, và thêm/s a trên b ng
Giaohang
Trigger cho thao tác thêm và s a trên giao hàng:
Create trigger tr_GH_ins_upd_NgayGH
On GIAOHANG for insert, update
As
if update(MaPDH) or update (NgayGH)
if exists(select * from inserted i, DatHang d
where i.MaPDH = d.MaPDH
40. Bài gi ng tóm t t H qu n tr cơ s d li u 38
and i.NgayGH<d.NgayDH)
begin
raiserror (N‘Ngày GH không th nh hơn ngày H’,0,1)
rollback tran
end
go
Bài t p: Trigger cho thao tác s a trên t hàng.
Ví d 2 – Ràng bu c toàn v n liên b
Xét L QH: KetQua(MASV, MAMH, LANTHI, DIEM)
T o trigger ki m tra RBTV: “Sinh viên ch ư c thi t i a 2 l n cho m t môn h c”
• Xác nh b ng t m nh hư ng:
Insert Delete Update
KetQua + - + (MASV, MAMH)
• Cài t trigger d a trên b ng t m nh hư ng:
-- Tao trigger ung voi thao tac insert tren bang KetQua
Create trigger trg_KetQua_insert
on KetQua
for insert
as
declare @SoLanThi int
select @SoLanThi=count(*)
from KetQua K, inserted I
where I.MaSV=K.MaSV and I.MaMH = K.MaMH
if @SoLanThi > 2
begin
raiserror('So lan thi phai <= 2', 0,1)
rollback transaction
end
Bài t p: T o trigger ng v i thao tac Update trên b ng KetQua.
Ví d 3: Trigger cho vi c th c hi n m t thao tác c p nh t d li u nào ó.
Cho quan h
CHI_TIET_HOA_DON(MaHD,STT, MaMH, SoLuong, DonGia, ThanhTien).
41. Bài gi ng tóm t t H qu n tr cơ s d li u 39
• Vi t trigger th c hi n c p nh t giá tr c a ThanhTien khi thêm m t chi ti t hóa ơn
42. Bài gi ng tóm t t H qu n tr cơ s d li u 40
Chương 4
B O M T VÀ AN TOÀN D LI U
I. B o m t trong h qu n tr cơ s d li u
1. Khái ni m cơ b n v b o m t
Nh m b o v h th ng CSDL không b xâm nh p, ngư i qu n tr cơ s d li u ph i
quy t nh cho phép hay không cho phép ngư i dùng truy c p và thao tác trên cơ s d
li u d a vào nhi m v c a ngư i dùng trên h CSDL. Ngư i qu n tr thư ng d a trên n n
t ng lý thuy t b o m t c a h cơ s d li u a ngư i dùng, nh m tìm ra phương pháp b o
m t theo úng v i nhu c u c a b o m t d li u.
V i m c ích tăng tính b o m t d li u, SQL Server h tr các tính năng cho phép
ngư i qu n tr thi t l p cơ ch b o v cơ s d li u trong môi trư ng a ngư i dùng, bao
g m các y u t chính sau:
o Vai trò c a ngư i dùng trong h th ng và cơ s d li u.
o Quy n s d ng các ng d ng cơ s d li u trong SQL Server.
o Quy n t o và s a i c u trúc các i tư ng CSDL.
o Quy n truy c p, x lý d li u.
Khi ăng nh p vào m t h th ng CSDL a ngư i dùng, ngư i s d ng c n ph i cung
c p UserID (tài kho n) và Password (m t kh u). D a trên UserID h th ng có kh năng
ki m soát t t c các hành vi c a ngư i s d ng trên CSDL SQL Server.
th c hi n ư c ch c năng này, ngư i qu n tr CSDL c n ph i thi t l p các quy n
x lý và truy c p vào CSDL khi t o ra UserID, ngoài ra còn có m t s thu c tính khác c a
SQL Server như quy n backup d li u, trao i d li u v i các ng d ng CSDL khác, …
Khi nói n b o m t, ngư i qu n tr c n quan tâm n các thông tin sau c a ngư i
dùng:
o M t ngư i dùng ch có m t UserID và m t m t kh u.
o Th i gian có hi u l c c a m t kh u.
o Gi i h n chi u dài c a m t kh u.
o Gi i h n ngư i s d ng theo license hay m r ng.
o Thông tin v ngư i s d ng.
Khi t o ngư i s d ng, tên tài kho n c n rõ ràng, d hi u d g i nh , và không cho
phép các ký t c bi t, không nên có kho ng tr ng.
2. L a ch n b o m t
43. Bài gi ng tóm t t H qu n tr cơ s d li u 41
Khi t o ra m t ngư i dùng (login user) trong SQL Server, có 3 cách tăng tính b o
m t cho ngư i s d ng ó:
o Giao ti p v i h i u hành: s d ng UserID và Password c a h i u hành Windows
ăng nh p SQL Server. V i lo i b o m t này, ngư i dùng truy c p vào m ng và có
th s d ng CSDL SQL Server, ng th i m t ngư i dùng có UserID và Password có
th s d ng tài nguyên trên m ng.
o B o m t chu n: v i lo i này, ngư i s d ng có UserID và Password tách r i v i h
i u hành m ng, ng v i lo i b o m t này ngư i s d ng ch có hi u l c trong CSDL
SQL Server, không th s d ng tài nguyên trên m ng.
o T ng h p c hai trư ng h p trên: m t s ngư i dùng s d ng quy n s d ng trên h
i u hành và SQL Server, m t s khác ch s d ng quy n truy c p vào SQL Server.
Lưu ý: Tài kho n ngư i dùng có giá tr trên SQL Server hi n hành, khi sang m t SQL
Server khác ph i t o ra tài kho n ngư i dùng trên server ó.
o SQL Server cung c p các ch c năng hay các th t c t o m i và qu n tr ngư i dùng
CSDL SQL Server như sau:
S d ng th t c sp_addlogin.
S d ng công c Enterprise Manager.
• S d ng th t c sp_addlogin
Cú pháp
sp_addlogin [ @loginame = ] 'login'
[ , [ @passwd = ] 'password' ]
[ , [ @defdb = ] 'database' ]
[ , [ @deflanguage = ] 'language' ]
[ , [ @sid = ] sid ]
[ , [ @encryptopt = ] 'encryption_option' ]
trong ó các tham s có ý nghĩa như sau:
@loginame: tên tài kho n s t o.
@passwd: m t kh u cho ngư i dùng có tài kho n trên.
@defdb: cơ s d li u m c nh khi ngư i dùng ăng nh p vào SQL Server.
@deflanguage: ngôn ng m c nhiên cho ngư i dùng SQL Server.
@sid: s nh n d ng h th ng khi ngư i dùng ăng nh p vào.
@encryptopt: khi t o tài kho n ngư i dùng trong CSDL, các thông tin v tài
kho n, m t kh u ư c lưu tr trong b ng sysusers c a CSDL Master, n u b n cung
c p tham s skip_enctription thì không mã hoá m t kh u trư c khi lưu vào b ng
sysusers, n u không cung c p tham s hay tr ng, SQL Server s mã hoá m t
kh u trư c khi lưu tr .
44. Bài gi ng tóm t t H qu n tr cơ s d li u 42
Ví d : t o ngư i dùng có tên ‘nam’, m t kh u ‘123’, cơ s d li u m c nh ‘QLKyNang’
Exec sp_addlogin ‘nam’, ‘123’, ‘QLKyNang’
- Thay i m t kh u
sp_password [[ @old = ] 'old_password' ,]
{ [ @new =] 'new_password' }
[ , [ @loginame = ] 'login' ]
3. Quy n ngư i dùng và qu n tr quy n ngư i dùng
Quy n c a ngư i dùng ư c nh nghĩa như m c ngư i dùng có th hay không th
th c thi trên CSDL, quy n ư c chia thành 4 lo i như sau:
o Quy n truy c p vào SQL Server.
o Quy n truy xu t vào CSDL.
o Quy n th c hi n trên các i tư ng c a CSDL.
o Quy n x lý d li u.
C p phát quy n truy c p vào CSDL
Cú pháp:
Use db_name
Go
sp_grantdbaccess [@loginame =] 'login'
[,[@name_in_db =] 'name_in_db' [OUTPUT]]
Các tham s :
@loginame: tài kho n c a ngư i s d ng ăng nh p vào SQL Server
@name_in_db: t o bí danh (tên khác) c a tài kho n ngư i dùng khi truy c p
vào CSDL db_name ư c ch nh, n u không ch rõ CSDL mu n cho phép
ngư i dùng truy c p thì ngư i dùng ư c c p quy n trên CSDL hi n hành.
Lo i b quy n truy c p vào CSDL db_name c a ngư i dùng
Use db_name
Go
sp_revokedbaccess [@loginame =] 'login'
C p phát quy n th c thi trên cơ s d li u
Sau khi c p phát quy n cho ngư i dùng truy c p vào CSDL, k ti p cho phép ngư i
dùng ó có quy n truy c p và x lý các i tư ng trong CSDL cũng như x lý d li u
trên các i tư ng ó.
Các quy n truy c p trên các i tư ng trong m t CSDL:
45. Bài gi ng tóm t t H qu n tr cơ s d li u 43
Quy n Di n gi i
SELECT Cho phép ngư i s d ng nhìn th y d li u, n u ngư i s d ng có quy n
này thì h ch có th th c thi nh ng phát bi u select truy v n d li u
trên các b ng hay các view ư c cho phép.
INSERT Cho phép ngư i s d ng thêm d li u, n u ngư i s d ng có quy n này,
h có th th c hi n phát bi u Insert, i v i m t s h th ng CSDL
khác, mu n th c thi phát bi u Insert, ngư i s d ng ph i có quy n
Select, trong SQL Server quy n Insert không liên quan n quy n truy
v n Select.
UPDATE Quy n này cho phép ngư i s d ng ch nh s a d li u b ng phát bi u
Update.
DELETE Quy n này cho phép ngư i s d ng xóa d li u b ng phát bi u Delete.
REFERENCE Cho phép ngư i s d ng thêm d li u vào b ng có khóa ngo i b ng
phát bi u Insert, trong SQL Server quy n Insert không liên quan n
quy n truy v n Select.
EXECUTE Quy n này cho phép ngư i s d ng th c thi các th t c (SP) trong
CSDL.
Th t c c p quy n GRANT
GRANT ALL | < PERMISSION> [, …n]
ON
<table ho c view name> [(<column name> [, … n])]
| <stored ho c extension procedure name>
TO
<login or role name> [, … n]
[WITH GRANT OPTION]
[AS <role name>]
Trong ó: t khóa ALL cho phép ngư i s d ng có t t c các quy n. PERMISSION là
m t trong các quy n: SELECT, INSERT, UPDATE, DELETE, REFERENCE,
EXECUTE. Ch rõ nh ng b ng d li u, view ho c th t c nào cho phép ngư i dùng truy
c p và x lý.
T ch i quy n truy v n và x lý d li u
DENY ALL | < PERMISSION> [, …n]
ON
<table ho c view name> [(<column name> [, … n])]
| <stored ho c extension procedure name>
46. Bài gi ng tóm t t H qu n tr cơ s d li u 44
TO
<login or role name> [, … n]
[Cascade]
Lo i b quy n truy v n và x lý d li u
REVOKE [ GRANT OPTION FOR ]
{ ALL [ PRIVILEGES ] | permission [ ,...n ] }
{
[ ( column [ ,...n ] ) ] ON { table | view }
| ON { table | view } [ ( column [ ,...n ] ) ]
| ON { stored_procedure | extended_procedure }
| ON { user_defined_function }
}
{ TO | FROM }
security_account [ ,...n ]
[ CASCADE ]
[ AS { group | role } ]
Quy n t o i tư ng trong CSDL
Trong CSDL có m t s i tư ng và các ch c năng như sao lưu d li u mà m i
ngư i s d ng trên CSDL tùy theo ch c năng và nhi m v c th ư c phép hay không
ư c phép t o các i tư ng như table, view, stored procedure, … và t o CSDL.
Các quy n t o các i tư ng như sau:
Create Database.
Create Table.
Create View.
Create Procedure.
Create Rule.
Create Default.
Backup Database.
Backup Log.
phân quy n t o i tư ng trong CSDL cho ngư i dùng, trong SQL Server có th
s d ng th t c GRANT như sau:
GRANT < ALL | Statement [, … n]> TO <login ID> [, … n]
47. Bài gi ng tóm t t H qu n tr cơ s d li u 45
4. Vai trò c a ngư i s d ng trong SQL Server và cơ s d li u
Vai trò trên SQL Server:
Vai trò (Role) Di n gi i
sysadmin Có các quy n tương ương v i sa.
serveradmin C u hình m t s tham s và t t server.
setupadmin B gi i h n b t m t s ch c năng liên k t server và kh i ng
m t s th t c.
securityadmin Qu n lý ngư i dùng và t o CSDL.
processadmin ư c phép d ng các giao tác ang th c hi n trên CSDL và m t
s quá trình th c hi n khác c a SQL Server.
dbcreator ư c phép t o CSDL.
Diskadmin Qu n lý các t p tin liên quan n CSDL SQL Server.
Vai trò trên CSDL:
Vai trò Di n gi i
V i vai trò này, ngư i s d ng (NSD) thu c nhóm s h u
db_owner
CSDL m i có th truy c p vào CSDL.
db_accessadmin Th c hi n các ch c năng gi ng như securityadmin.
NSD ư c phép select trên các b ng d li u c a các ngư i
db_datareader
dùng khác trong CSDL.
NSD ư c phép insert, update, delete trên các b ng d li u
db_datawriter
c a các ngư i dùng khác trong CSDL.
db_ddladmin NSD có th thêm hay ch nh s a các i tư ng c a CSDL.
db_securityadmin NSD có quy n tương ương v i quy n c a securityadmin.
db_backupoperator NSD có th th c hi n ch c năng backup d li u.
db_denydareader Không cho phép s d ng phát bi u SELECT trên t t c các
b ng d li u c a CSDL.
db_denydawriter Không cho phép s d ng phát bi u INSERT, UPDATE,
DELETE trên t t c các b ng d li u c a CSDL.
S d ng các th t c h th ng t o m t role m i, thêm m t ngư i dùng vào m t role,
lo i b ngư i s d ng ra kh i m t role.
o T o m t role
sp_addrole [ @rolename = ] 'role_name'
[ , [ @ownername = ] 'owner' ]
Trong ó:
48. Bài gi ng tóm t t H qu n tr cơ s d li u 46
@rolename: tên role m i
@ownername: ch s h u c a role m i, m c nh là dbo
Sau khi t o role m i c n ph i gán m t s quy n truy c p và x lý trên các b ng d
li u nào ó trong CSDL cho role m i ó.
o Thêm ngư i s d ng vào Role
sp_addrolemember [ @rolename = ] 'role_name' ,
[ @membername = ] ‘login_ID'
o Lo i b ngư i s d ng ra kh i m t role
sp_droprolemember [ @rolename = ] 'role_name' ,
[ @membername = ] 'login_ID '
II. B n sao d li u
Ph n này s gi i thi u k thu t làm gi m lưu lư ng d li u giao d ch v i SQL Server
khi ã c u hình nhi u Server trên m ng.
1. Gi i thi u v nhân b n d li u
Nhân b n d li u (Replication) là công c ư c s d ng sao chép m t ho c nhi u
CSDL n m t ho c nhi u server (SQL Server) khác. Các Server ư c t trong m ng
máy tính n i b (LAN). Ngư i khai thác có th th c hi n truy c p n CSDL có trong
Server ch a d li u ư c nhân b n. D li u gi a các máy ư c th c hi n ng b v i
nhau theo l ch ho c theo s ki n, khi có yêu c u. Nhân b n d li u có nh ng ưu i m sau:
− D li u ư c lưu tr nhi u nơi, hi u qu trong vi c có nhi u ng d ng cùng truy
c p, khai thác.
− Thích h p v i các ng d ng phân tích d li u c a h th ng x lý giao d ch tr c
tuy n (OLTP) trong kho d li u (Data warehouse).
− Có th khai thác d li u khi không k t n i n Server.
− Gi m thi u xung t do s lư ng l n các giao d ch trên m ng.
− Là m t gi i pháp an toàn khi Server b l i ho c b o dư ng.
Mô hình nhân b n.
D ch v nhân b n d li u g m các thành ph n cơ b n sau: Publisher, Distributor,
Subscribers, Publications, Articles, Subscriptions.
− Publisher: là server cung c p d li u nhân b n cho các server khác. M t publisher có
th thi t l p nhi u b d li u nhân b n (g i là publication).
49. Bài gi ng tóm t t H qu n tr cơ s d li u 47
− Distributor: là server qu n lý các thông tin nhân b n, lưu tr d li u trong các giao
d ch th c hi n nh n và chuy n d li u t Publisher n các Subscriber. Remote
distributor là server tách r i kh i publisher và ư c c u hình là distributor. Local
distributor là m t server ư c c u hình là Publisher và Distributor.
− Subscriber: Là server nh n d li u nhân b n. Subscriber g n li n v i publication (là
máy ch nh n d li u nhân b n c a m t b d li u c u hình nhân b n).
− Article: Là m t b ng, t p d li u ho c i tư ng c a CSDL c u hình nhân b n.
− Publication: Là m t t p g m m t ho c nhi u article.
− Subscription: Là m t giao d ch yêu c u b n sao b d li u ho c các i tư ng c a
CSDL th c hi n nhân b n. Trong m i giao d ch publisher th c hi n y (push
subscription) d li u, subscriber th c hi n kéo (pull subscription).
Nhân b n d li u ư c th c hi n theo nh ng mô hình cơ b n sau:
− Central Publisher: Là mô hình Publisher và Distributor thi t l p trên m t máy. G m
các mô hình sau:
M t Publisher và m t Subscriber:
50. Bài gi ng tóm t t H qu n tr cơ s d li u 48
M t Publisher và nhi u Subscriber.
Publisher và Subscriber ư c thi t l p trên m t máy:
− Publisher và Distributor không thi t l p trên m t máy:
− Republisher: Là mô hình Publisher xu t b n d li u n Subscriber, sau ó Subscriber
ư c thi t l p là Publisher xu t b n d li u n Subscriber khác.
51. Bài gi ng tóm t t H qu n tr cơ s d li u 49
ư ng truy n gi a hai máy ư c thi t l p là Publisher có th t c th p, phù h p v i
v trí xa nhau. Ví d mô hình gi a các vùng cách xa nhau:
+ Central Subscriber: Là mô hình Subscriber thi t l p nh n d li u xu t b n t nhi u
Publisher.
52. Bài gi ng tóm t t H qu n tr cơ s d li u 50
Nh ng ki u nhân b n d li u.
Có 3 ki u nhân b n d li u: Snaphot, Transaction, Merge.
Snapshot replication: là ki u nhân b n th c hi n sao chép, phân tán d li u ho c các i
tư ng c a CSDL t i m t th i i m. Snapshot thư ng ư c s d ng cho nh ng tình hu ng
sau:
D li u thư ng là tĩnh, ít thay i.
Nhân b n s lư ng d li u nh .
Transaction replication: là ki u nhân b n mà b t u b ng nhân b n Snapshot, sau ó s
th c hi n nhân giao d ch d li u theo các s ki n insert, update, delete và nh ng thay i
liên quan n th c hi n th t c, khung nhìn ch m c. Nhân b n ki u này cho phép th c
hi n l c d li u t i Publisher, cho phép ngư i s d ng s a i d li u nhân b n t i
53. Bài gi ng tóm t t H qu n tr cơ s d li u 51
subscriber và chuy n d li u ã s a i n Publisher ho c Subscriber khác, d li u s a
i này có th coi là d li u ư c xu t b n. Nhân b n ki u này ư c th c hi n khi:
Mu n s a i d li u ư c xu t b n chuy n n Subscriber, th i gian th c hi n
theo giây, ho c t c th i.
C n giao d ch trên toàn b h th ng nhân b n d li u (d li u có th chuy n nt t
c các Subscriber ho c không chuy n n Subscriber nào).
Subscriber thư ng xuyên k t n i v i Publisher.
Merge replication: là ki u nhân b n d li u cho phép th c hi n nhân b n s a i d li u
trên nhi u Subscriber, có th k t n i (online) ho c không k t n i (offline) n Publisher.
D li u s ư c ng b theo l ch ho c theo yêu c u, d li u c p nh t có th i i m sau s
ư c ch p nh n. Ki u nhân b n này th c hi n khi:
Nhi u Subscriber có nhu c u c p nh t d li u và chuy n d li u c p nh t n
Publisher ho c Subscriber khác.
Subscriber yêu c u nh n ho c chuy n d li u khi offline, ng b d li u v i các
Subscriber và Publisher sau.
54. Bài gi ng tóm t t H qu n tr cơ s d li u 52
2. C u hình Publisher và Distributor.
Trư c khi th c hi n c u hình các máy thành Publisher hay Distributor ta ph i th c hi n
ch y d ch v SQL Server Agent trong ch c năng Service manager. Các bư c c u hình
như sau:
- Ch n Server c n c u hình -> Replication
- Nh p ph i chu t -> Configure Publishing Subscription and Distribution...
- Th c hi n theo các bư c:
+ Ch n thư m c Snapshot
55. Bài gi ng tóm t t H qu n tr cơ s d li u 53
- t tên CSDL c a Distribution.
- Ch n Server c u hình thành Publisher.
56. Bài gi ng tóm t t H qu n tr cơ s d li u 54
- Ch n CSDL tham gia nhân b n, ki u nhân b n.
- Ch n Server ư c c u hình là Subscriber c a Publisher ang thi t l p.
- K t thúc.
T o Publication
Bư c này s th c hi n t o Publication, cách th c hi n như sau:
+ Ch n Publication trong Replication c a Publisher.
+ Nh n ph i chu t → ch n New Publication...
57. Bài gi ng tóm t t H qu n tr cơ s d li u 55
+ Th c hi n theo các bư c:
- Ch n CSDL c n xu t b n d li u ho c i tư ng.
- Ch n ki u nhân b n (trong ví d này th c hi n ki u Merge).
- Ch n phiên b n SQL Server c a Subscriber.
- Ch n Article tham gia Publication.
58. Bài gi ng tóm t t H qu n tr cơ s d li u 56
- t tên cho Publication.
- K t thúc.
T o Push Subscription.
Bư c này th c hi n t o th t c y (push) t Publisher (Distributor trong ví d
này) n Subscriber, ư c th c hi n trên Publisher. Các bư c th c hi n như sau:
59. Bài gi ng tóm t t H qu n tr cơ s d li u 57
- Ch n Publication c a Publisher -> Nh n ph i chu t -> Push new Subscription...
- Ch n Subscriber.
- Ch n CSDL trên Subscriber n u ã có, n u chưa có th c hi n ch n ch c năng t o m i.
- Ch n l ch th c hi n ng b d li u.
- K t thúc. Sau khi thi t l p xong trên Subscriber s có CSDL theo tên ã t o.
T o Pull Subscription
60. Bài gi ng tóm t t H qu n tr cơ s d li u 58
Bư c này th c hi n t o công c kéo d li u nhân b n t Publisher v Subscriber, ư c
th c hi n trên Subscriber.
- Ch n Subscription c a Subscriber → Nh n ph i chu t → New Pull Supcription...
- Th c hi n theo các bư c:
+ Ch n Publication.
+ Ch n Agent tham gia k t n i Publisher.
- Ch n CSDL ích.
61. Bài gi ng tóm t t H qu n tr cơ s d li u 59
- Th c hi n ti p các bư c và k t thúc. N u ã t o Push Subscription v i m t CSDL s
không ư c t o Pull Subscription v i CSDL ó.
Th c hi n ng b d li u
Sau khi thi t l p theo các mô hình nhân b n xong, có th th c hi n ng b d li u b ng
cách:
- Th c hi n theo l ch.
- Theo yêu c u: Ch n Subscription (Push ho c Pull) → Nh n ph i chu t → Start
Synchronizing.
Sau khi th c hi n xong d li u s ư c ng b gi a Publisher và Subscriber. Ngoài th c
hi n theo công c ta có th tìm hi u th c hi n nhân b n theo câu l nh T-SQL ho c Stored
Procedure.
III. Sao lưu và khôi ph c d li u
1. Lý do ph i sao lưu và khôi ph c d li u
Trong quá trình th c hi n qu n tr CSDL SQL Server thì m t s nguyên nhân sau ây b t
bu c b n ph i xem xét n k thu t sao lưu và khôi ph c d li u:
ĩa b h ng (ch a các t p tin CSDL).
Server b h ng.
Nguyên nhân bên ngoài (thiên nhiên, h a ho n, m t c p,...).
User vô tình xóa d li u.
B vô tình hay c ý làm thông tin sai l ch.
B hack.
2. Các lo i sao lưu d li u
Sao lưu (Backup) d li u trong SQL Server g m các lo i sau:
Full Database Backups: sao chép toàn b CSDL (các t p tin bao g m các b ng,
khung nhìn, các i tư ng khác).
Differential Database Backups: sao chép nh ng d li u thay i trong Data file k
t l n full backup g n nh t.
File or file group backups: sao chép m t file ơn hay file group.
Differential File or File Group Backups: th c hi n như Differential Database
nhưng copy ph n d li u thay i c a file ơn ho c file group.
Transaction log backups: Ghi nh n t t c các transaction ch a trong transaction log
file k t l n transaction log backup g n nh t. V i lo i sao lưu này ta có th khôi
ph c d li u t i m t th i i m.
3. Các mô hình khôi ph c d li u
62. Bài gi ng tóm t t H qu n tr cơ s d li u 60
Full Recovery model: Là mô hình ph c h i toàn b ho t ng giao d ch c a d li u
(Insert, Update, Delete, ho t ng b i l nh bcp, bulk insert). V i mô hình này ta có
th ph c h i d li u t i m t th i i m trong quá kh ã ư c lưu trong transaction
log file.
Bulk-Logged Recovery Model: Mô hình này ư c th c thi cho các thao tác bcp,
bulk insert, create ch m c, writetext, updatetext, các ho t ng này ch nh t ký s
ki n vào log bi t mà không sao lưu toàn b d li u, chi ti t như trong full
recover. Các s ki n Insert, Update, Delete v n ư c nh t ký và khôi ph c bình
thư ng.
Simple Recovery Model: V i mô hình này b n ch ph c h i l i th i i m sao lưu
g n nh t mà không theo th i i m khác trong quá kh .
Cách t mô hình khôi ph c:
- Ch n CSDL.
- Nh n nút ph i chu t → Properties → Options → Recovery → ch n Model.
Xét ví d sau: Gi s ta có m t CSDL ư c backup theo chi n lư c như hình v bên dư i
Nhìn hình ta th y CSDL ư c l p l ch Full Database Backup vào ngày ch nh t,
Differential Database Backup vào ngày th ba và th năm, còn Log Database Backup vào
5 ngày trong tu n, ngày th sáu có s c v i CSDL, data file b h ng. V n t ra là
ph i ph c h i d li u và CSDL ho t ng bình thư ng. Ta ph i làm các bư c sau:
Th c hi n Backup log file (gi s log file không b h ng).
Khôi ph c Full Database c a ngày ch nh t.
Ph c h i Differential Database c a ngày th năm.
Khôi ph c Transaction log backup ngày th năm.
63. Bài gi ng tóm t t H qu n tr cơ s d li u 61
4. Sao lưu cơ s d li u (Backup Database)
Trư c khi xem xét k thu t sao lưu CSDL, ta th ng nh t m t s thu t ng b ng ti ng
Anh như sau:
Backup: Là quá trình copy toàn b ho c m t ph n database, transaction log, file, file
group thành l p m t backup set ư c ch a trong backup media (disk ho c tape) b ng
cách s d ng m t backup device (tape drive name ho c physical filename).
Backup Device: M t file v t lý ho c m t drive tape.
Backup file: M t file ch a Backup set.
Backup media: là Disk ho c tape.
Backup set: M t b backup m t l n backup ơn ch a trên backup media.
Các bư c th c hi n backup như sau:
− Ch n CSDL c n backup.
− Nh n ph i chu t → All Tasks → Backup Database…
- Nh p các tham s , l a ch n ki u.
5. Khôi ph c d li u (Restore Database)
Là ch c năng th c hi n khôi ph c d li u ã sao lưu, tùy theo chi n lư c backup mà
ngư i qu n tr có th ph c h i n th i i m nào, thu ư c b d li u trong quá kh như
th nào. Khôi ph c d li u ư c th c hi n theo th t backup, thông tin này ư c lưu tr
trong msdb. Các bư c th c hi n như sau:
− Ch n m c Databases → Nh n nút ph i chu t → All Tasks → Restore Database…
− Nh p tham s , ch n mô hình khôi ph c.
IV. Qu n lý giao d ch
1. Các khái ni m
M t giao d ch là m t ơn v th c hi n chương trình truy xu t và có th c p nh t nhi u
m c d li u. M t giao d ch thư ng là k t qu c a s th c hi n m t chương trình ngư i
dùng ư c vi t trong m t ngôn ng thao tác d li u m c cao ho c m t ngôn ng l p trình
(SQL, COBOL, PASCAL ...), và ư c phân cách b i các câu l nh (ho c các l i g i hàm)
có d ng begin transaction và end transaction. Giao d ch bao g m t t c các ho t ng
ư c th c hi n gi a begin và end transaction.
m b o tính toàn v n c a d li u, ta yêu c u h CSDL duy trì các tính ch t sau c a
giao d ch:
• Tính nguyên t (Atomicity). Ho c toàn b các ho t ng c a giao d ch ư c ph n
ánh úng n trong CSDL ho c không có gì c .
• Tính nh t quán (consistency). S th c hi n c a m t giao d ch là cô l p (Không
64. Bài gi ng tóm t t H qu n tr cơ s d li u 62
có giao d ch khác th c hi n ng th i) b o t n tính nh t quán c a CSDL.
• Tính cô l p (Isolation). Cho dù nhi u giao d ch có th th c hi n ng th i, h
th ng ph i m b o r ng i v i m i c p giao d ch Ti, Tj , ho c Tj k t thúc th c
hi n trư c khi Ti kh i ng ho c Tj b t u s th c hi n sau khi Ti k t thúc. Như
v y m i giao d ch không c n bi t n các giao d ch khác ang th c hi n ng th i
trong h th ng.
• Tính b n v ng (Durability). Sau m t giao d ch hoàn thành, các thay i ã ư c
t o ra i v i CSDL v n còn ngay c khi x y ra s c h th ng.
Các tính ch t này thư ng ư c g i là các tính ch t ACID (Các ch cái u c a b n
tính ch t). Ta xét m t ví d : m t h th ng ngân hàng g m m t s tài kho n và m t t p
các giao d ch truy xu t và c p nh t các tài kho n. T i th i i m hi n t i, ta gi thi t r ng
CSDL n m trên ĩa, nhưng m t vài ph n c a nó ang n m t m th i trong b nh . Các
truy xu t CSDL ư c th c hi n b i hai ho t ng sau:
• READ(X): chuy n m c d li u X t CSDL n buffer c a giao d ch th c hi n
ho t ng READ này.
• WRITE(X): chuy n m c d li u X t buffer c a giao d ch th c hi n WRITE n
CSDL.
Trong h CSDL th c, ho t ng WRITE không nh t thi t d n n s c p nh t tr c
ti p d li u trên ĩa; ho t ng WRITE có th ư c lưu t m th i trong b nh và ư c
th c hi n trên ĩa mu n hơn. Trong ví d , ta gi thi t ho t ng WRITE c p nh t tr c
ti p CSDL.
Ti là m t giao d ch chuy n 50 t tài kho n A sang tài kho n B. Giao d ch này có th
ư c xác nh như sau:
Ti : READ(A);
A:=A - 50;
WRITE(A)
READ(B);
B:=B + 50;
WRITE(B);
Ta xem xét m i yêu c u trong ACID:
• Tính nh t quán: òi h i nh t quán ây là t ng c a A và B là không thay ib i
s th c hi n giao d ch. N u không có yêu c u nh t quán, ti n có th ư c t o ra hay
m t b i giao d ch. D dàng ki m nghi m r ng n u CSDL nh t quán trư c m t th c
hi n giao d ch, nó v n nh t quán sau khi th c hi n giao d ch. m b o tính nh t quán