CH ƯƠ NG 7:
CHUY N TÁC VÀ KHÓA ể
(TRANSACTIONS AND LOCKS)
1
Trang 2KHÁI NI M V CHUY N TÁC ệ ề ể
chuy n tác dùng đ ch m t công vi cể ể ỉ ộ ệ
G m nhi u b c ồ ề ướ
Các b c đ c thi hành l n l t ướ ượ ầ ượ
C công vi c s th t b i n u m t trong các b c ả ệ ẽ ấ ạ ế ộ ướ
Trang 3KHÁI NI M V CHUY N TÁC (TT) ệ ề ể
Tính ACID
Atomic: T t c các b c đ c gói trong chuy n ấ ả ướ ượ ể
tác nh m t hành đ ng duy nh t ư ộ ộ ấ
Consistency: D li u đ c đ m b o toàn v n cho ữ ệ ượ ả ả ẹ
dù transaction có thành công hay không
Isolation: Khi hai transaction th c hi n đ ng ự ệ ồ
th i, chúng đ c gi đ c l p đ các k t qu ờ ượ ữ ộ ậ ể ế ả
không nh h ng l n nhau ả ưở ẫ
Durability: Sau khi transaction th c hi n thành ự ệ
công, d li u đ c đ m b o k c khi h th ng ữ ệ ượ ả ả ể ả ệ ố
Trang 4CHUY N TÁC KHÔNG T ể Ườ NG MINH
SQL Server chia các câu l nh th c hi n làm ệ ự ệ
hai lo iạ
chuy n tác t ng minh ể ườ
chuy n tác không t ng minh ể ườ
M c đ nh, SQL Server th c hi n các l nh ặ ị ự ệ ệ ở
ch đ chuy n tác không t ng minhế ộ ể ườ
M i câu l nh coi nh m t transaction: INSERT, ỗ ệ ư ộ
Trang 5CHUY N TÁC T ể Ườ NG MINH
chuy n tác t ng minh là chuy n tác ph i khai ể ườ ể ả
báo tr c ướ
S d ng t khoá ử ụ ừ Begin Tran
Các l nh theo sau thu c vào chuy n tác đã khai báo ệ ộ ể
Tác d ng thay đ i d li u đ c c p nh t ngay vào ụ ổ ữ ệ ượ ậ ậ
CSDL nh ng ư
Các chuy n tác khác không th y đ c thay đ i này ể ấ ượ ổ
S b h y b khi phiên làm vi c gi a client – server ch m ẽ ị ủ ỏ ệ ữ ấ
Trang 6CHUY N TÁC BEGIN TRAN ể
Trang 7CHUY N TÁC COMMIT TRAN ể
Commit xác đ nh k t thúc hay hoàn thành ị ế
chuy n tác T i th i đi m commit đ c g i, ể ạ ờ ể ượ ọ
chuy n tác đ c xem nh là đã th c hi n ể ượ ư ự ệ
Trang 8 Ví d :ụ
Begin tran
Update bang1 set cot1 = ‘AB’ where cot2 = ‘BB’
Insert bang2 values(‘gtri1’,’gtri2’)
Select * from bang2
Trang 9CHUY N TÁC ROLLBACK TRAN ể
Khi g p chuy n tác này t t c nh ng phát ặ ể ấ ả ữ
bi u đ c th c hi n t khi g p chuy n tác ể ượ ự ệ ừ ặ ể
[<transaction name | <save point name> |
<@transaction variable> | <@savepoint
Trang 11CHUY N TÁC SAVE TRAN ể
Trang 14KHÓA (LOCK)
Khóa (Lock) đ c sinh ra đ gi i h n quy n ượ ể ớ ạ ề
truy nh p trên môi tr ng đa ng i dùng ậ ườ ườ
Microsoft SQL Server s d ng lock đ đ m ử ụ ể ả
b o tính toàn v n c a transaction và tính ả ẹ ủ
th ng nh t c a databaseố ấ ủ
N u lock không đ c s d ng, d li u bên ế ượ ử ụ ữ ệ
trong CSDL có th b sai v logíc, và các ể ị ề
Trang 15CÁC V N Đ CÓ TH NGĂN NG A B NG ấ ề ể ừ ằ
LOCK
Lock có th gi i quy t 4 v n đ sau:ể ả ế ấ ề
Dirty reads (đ c d li u sai) ọ ữ ệ
Unrepeatable reads (đ c hai l n b n ghi) ọ ầ ả
Phantoms (đ c các b n ghi nháp, không có) ọ ả
Trang 16Đ C D LI U SAI (DIRTY READS) ọ ữ ệ
Đ c d li u sai x y ra khi chuy n tác đ c ọ ữ ệ ả ể ọ
Trang 17Đ C B N GHI 2 L N ọ ả ầ
Khi đ c m u tin 2 l n trong m t chuy n tác ọ ẫ ầ ộ ể
trong khi chuy n tác khác ch thông báo v ể ỉ ề
Trang 19 X y ra khi 2 chuy n tác đang đ c m u tin ả ể ọ ẫ
d li u, sau đó chuy n tác 1 ghi d li u c a ữ ệ ể ữ ệ ủ
b n ghi, chuy n tác 2 cũng ghi k t qu ch ả ể ế ả ỉ
Trang 20CH Đ LOCK ế ộ
Khóa chia s (Share locks)ẻ
Đây là lo i căn b n nh t, lock chia s tài nguyen ạ ả ấ ẻ
cho phép đ c d li u, không cho phép thay đ i ọ ữ ệ ổ
b t kỳ thu c tính nào c a tài nguyên ấ ộ ủ
Khóa đ c quy n (exclusive locks)ộ ề
Không t ng thích v i các lo i khóa khác, khóa ươ ớ ạ
này ngăn ng a 2 ng i s d ng cùng c p nh t, ừ ườ ử ụ ậ ậ
Trang 22CH Đ LOCK (TT) ế ộ
Khóa c p nh t (Update locks)ậ ậ
K t h p gi a share lock và exclusive lock ế ợ ữ
V i câu l nh update ch ra b n ghi b ng m nh ớ ệ ỉ ả ằ ệ
đ where, trong khi ch a c n c p nh t thì s là ề ư ầ ậ ậ ẽ
tr ng thái share lock Khi câu l nh update th c ạ ệ ự
hi n ch đ exclusive lock intent locks ệ ở ế ộ
Dùng gi i quy t phân c p đ i t ng Trong sql ả ế ấ ố ượ
server, intent locks ch gi i quy t đ n b ng ch ỉ ả ế ế ả ứ
Trang 23CH Đ LOCK (TT) ế ộ
Schema locks xu t phát t 2 lo i sau:ấ ừ ạ
Schema modification locks: gi n đ thay đ i ả ồ ổ
cách t o đ i t ng, không yêu c u các phát bi u ạ ổ ượ ầ ể
create, alter, drop
Schema stability lock: t ng t share lock, lock ươ ự
này ngăn ng a các yêu c u c a các phát bi u ừ ầ ủ ể
create, alter, drop khi đã thi t l p schema ế ậ
Trang 24VÍ D ụ
Thêm m t quy n sách m i vào b ng sách ộ ể ớ ả
và đi kèm v i nó là vi c thêm vào m t nhà ớ ệ ộ
Trang 26Create proc sp_themdocgia18tuoi
ki m tra madg ể
If not exists(select * from docgia where madg = @madg)
Thêm đ c gi ộ ả
Insert into docgia values(@madg, @hoten, @ngaysinh, @diachi)
If (@@error <>0) begin
rollback tran End