Bài giảng Giao tác trong hệ quản trị cơ sở dữ liệu SQL server 2012 tìm hiểu giao tác; vấn đề đặt ra cho việc dùng giao tác; giao tác tường minh; giao tác – điểm lưu; hành vi đọc dữ liệu với giao tác; mức độ cô lập trong giao tác (isolation level); giao tác không tường minh; giao tác tự động...
Trang 1H QU N TR C S D LI U Ệ Ả Ị Ơ Ở Ữ Ệ
SQL SERVER 2012
Trang 2(Transaction)
Giao tác được hi u nh khái ni m ch t p các l nh để ư ệ ỉ ậ ệ ược th c ự
hi n nh ng có s g n k t v i nhau và đệ ư ự ắ ế ớ ược coi nh là 1 đ n v ư ơ ị
ho t đ ng, chúng ch thành công n u nh t t c thành công và ạ ộ ỉ ế ư ấ ả
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)ấ
• Tính b n v ng (Durability): Khi h th ng có l i, nh ng thành ề ữ ệ ố ỗ ư công c a giao tác v n đủ ẫ ược ghi vào d li u. ữ ệ
Trang 3(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 ? ử ụ ơ ế ư ế
Trang 4Giao tác t ườ ng minh
(Explicit)
Giao tác
Begin tran [tên_giao_tác]
lệnh | khối_lệnh
{ Commit tran | Rollback tran } [tên_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 ủ ữ ể ư ế
Trang 5Giao 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
=> Rollback tran s1 ch h y b k t qu t sau l nh ỉ ủ ỏ ế ả ừ ệ save tran s1 đ n ch ế ổ rollback tran s1 và sau đó là ti p t c ế ụ làm ti p (giao tác t1 v n còn).ế ẫ
Trang 6Hà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 đó ọ ầ ầ ấ ữ ệ ư
đ c l i thì th y là B (do giao tác khác thay đ i) ọ ạ ấ ổ
• 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) ở ả
Trang 7M c đ cô l p trong giao tác ứ ộ ậ
(Isolation level)
ISOLATION
LEVEL DIRTY READ REPEATE NON
D
PHANTO
M READ
Serializable
Trang 8M 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 ……
Trang 9Giao tác không t ườ ng minh
(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
K t thúc b ng l nh ế ằ ệ : COMMIT | ROLLBACK TRAN
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
Trang 10Giao tác t đ ng ự ộ
C ch t đ ng xác nh n đ ơ ế ự ộ ậ ượ c th c thi khi trong ự
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 ỗ ạ ữ ệ tác đ ượ c ch p nh n đ n th i đi m b l i ấ ậ ế ờ ể ị ỗ
Trang 11Giao tác l ng nhau ồ
• Cho phép các giao tác l ng v i nhau ồ ớ
• L nh ệ commit ch có tác d ng cho giao tác c p ‘con’ ỉ ụ ấ
g n nh t ầ ấ
• L nh ệ rollback tran có tác d ng h y t t c và tr v ụ ủ ấ ả ở ề
đ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 ồ ạ
Trang 12Giao 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