Ị Ơ Ở Ữ Ệ
Ả
Ệ
GIAO TÁC TRONG H QU N TR C S D LI U SQL SERVER 2012
Giao tác (Transaction)
ư ượ ệ
ệ c hi u nh khái ni m ch t p các l nh đ ư ự c th c ơ ế ớ
ượ ị c coi nh là 1 đ n v t c thành công và
ệ ạ ộ ấ ạ ế ỉ ậ ể Giao tác đ ượ ự ắ ư hi n nh ng có s g n k t v i nhau và đ ư ấ ả ỉ ho t đ ng, chúng ch thành công n u nh t ầ ử ấ ạ th t b i n u có 1 ph n t ế th t b i.
ấ ủ Tính ch t c a giao tác
• Tính nguyên t
ử ế ấ ả (Atomicty): Thành công n u t t c thành công.
• Tính nh t quán (Consistency): V n đ m b o các ràng bu c.
ấ ẫ ả ả ộ
• Tính cô l p (Isolation): Th hi n m c đ riêng t
ứ ộ ể ệ ậ c a t ng
ể ổ ư ủ ừ ấ
ộ giao tác. (M t giao tác đang thay đ i có th bên ngoài th y hay không th y)ấ
ỗ ư i, nh ng thành
ề ữ ủ ẫ ượ ữ ệ ệ ố • Tính b n v ng (Durability): Khi h th ng có l c ghi vào d li u. công c a giao tác v n đ
Giao tác (Transaction)
ề ặ
ệ
ấ
V n đ đ t ra cho vi c dùng giao tác
ử ụ o Khi nào s d ng giao tác ?
ử ụ
ở ứ ộ
ậ
ợ
o S d ng giao tác
m c đ cô l p nào là phù h p ?
ả
ạ
ưở
ủ
o Ph m vi nh h
ng c a giao tác là đâu ?
ế ố ớ ệ
ữ ậ
ả
ị o Kh năng các ngôn ng l p trình k t n i v i h qu n tr
ơ ế
ư ế
ả ử ụ
có s d ng c ch giao tác nh th nào ?
ườ
ng minh
Giao tác t (Explicit)
Begin tran [tên_giao_tác]
lệnh | khối_lệnh
{ Commit tran | Rollback tran }
[tên_giao_tác]
Giao tác
ể ư ạ T o đi m l u
save tran tên_điểm_lưu
ể ư ế ủ ữ H y nh ng gì sau đi m l u n u rollback
ể ư
Giao tác – Đi m l u (Save point)
begin tran t1
lệnh | khối_lệnh
save tran s1
lệnh | khối_lệnh
ứ ư ấ rollback tran s1 -- ch a ch m d t t1
lệnh | khối_lệnh
commit tran t1
save
ỉ ủ ỏ ế ả ừ ệ sau l nh
ế ế ụ ổ rollback tran s1 và sau đó là ti p t c
ế ẫ => Rollback tran s1 ch h y b k t qu t tran s1 đ n ch làm ti p (giao tác t1 v n còn).
ọ ữ ệ ớ Hành vi đ c d li u v i giao tác
• Dirty read
ọ ữ ệ
ư
Đ c d li u mà giao tác khác ch a commit.
• Non repeatable read (Non Rep | Lost Update)
ấ ữ ệ
ầ
Giao tác đ c l n đ u th y d li u là A, nh ng sau đó
ọ ầ ấ
ổ
ọ ạ
ư i thì th y là B (do giao tác khác thay đ i)
đ c l
• Phantom read
ọ ữ ệ
ọ
ả
ở
Khi giao tác 1 đ c d li u, bên ngoài hay giao tác khác ớ thêm dòng m i vào hay xóa đi, làm cho các dòng đang đ c tr thành dòng o (phantom).
ứ ộ
ậ
M c đ cô l p trong giao tác (Isolation level)
ISOLATION LEVEL
DIRTY READ
PHANTO M READ
NON REPEATE D
Read uncommitted
√
√
√
Read committed
√
√
Repeatable read
√
Serializable
ứ ộ
ậ
M c đ cô l p trong giao tác (Isolation level)
ế ậ ứ ộ Thi t l p m c đ
SET TRANSACTION ISOLATION LEVEL
{ read uncommitted|
read committed |
repeatable read |
serializable }
BEGIN TRAN ……
ườ
ng minh
Giao tác không t (Implicit)
ắ ầ
ớ
ệ
B t đ u giao tác v i các l nh
ALTER TABLE, DROP, TRUNCATE TABLE,
CREATE, OPEN, FETCH, REVOKE, GRANT
DELETE, INSERT, SELECT, UPDATE
ệ
ế
ằ
: COMMIT | ROLLBACK TRAN
K t thúc b ng l nh
ắ ầ
ế
ộ
ớ
Khi k t thúc cũng là lúc b t đ u m t giao tác m i.
ế ậ
ố ấ
ậ
Thi
t l p thông s ch p nh n
SET IMPLICIT_TRANSACTIONS ON|OFF
ự ộ
Giao tác t
đ ng
ơ ế ự ộ
c th c thi khi trong
đ ng xác nh n đ ấ
ệ ỗ
C ch t giao tác xu t hi n l
ự ậ ượ ỗ ạ i lúc ch y hay l
i cú pháp.
ị ủ
ỗ
• L i cú pháp: giao tác b h y (rollback)
ạ
ữ ệ ể
ị ỗ
ượ
ậ
ấ
ờ
• L i lúc ch y (khóa chính, sai d li u,…): giao ế c ch p nh n đ n th i đi m b l
ỗ tác đ
i.
ồ Giao tác l ng nhau
ớ
ồ
• Cho phép các giao tác l ng v i nhau.
ụ
ấ
ỉ
commit ch có tác d ng cho giao tác c p ‘con’ ấ
• L nh ệ ầ g n nh t.
ụ
ở ề t c và tr v
• L nh ệ ể
ầ ủ
ấ
ủ ấ ả rollback tran có tác d ng h y t ấ đi m ban đ u c a giao tác c p ‘cha’ nh t.
ệ ạ
ể
ờ
ỉ • Bi n ế @@trancount ch xem vào th i đi m hi n t
i
ồ ạ
có bao nhiêu giao tác đang t n t
i.
ồ Giao tác l ng nhau
Begin tran t1
………
begin tran t2
…………
print @@trancount @@trancount là 2
commit tran t2
………
print @@trancount @@trancount là 1
commit tran t1