Ị Ơ Ở Ữ Ệ

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