You are on page 1of 62

Chapter 4

Transaction Overview

Controlling Concurrent Behavior

1
Chapter Outline
1. Khái niệm giao dịch.
Bốn thuộc tính quan trọng của giao dịch.
Trạng thái giao dịch
Thực hiện đồng thời và lịch trình
Khả năng phục hồi
Kiểm soát đồng thời dựa trên khóa
Phục hồi sau một vụ tai nạn

2
1. Transaction concept
 Giao dịch được định nghĩa là bất kỳ một
lần thực thi chương trình người dùng
nào trong DBMS và khác với việc thực
thi chương trình bên ngoài DBMS.
 Thực hiện cùng một chương trình
nhiều lần sẽ tạo ra một số giao dịch.

3
1. Transaction concept (cont’d)
 DBMS xử lý việc thực thi chương trình người
dùng hoặc giao dịch, dưới dạng một loạt các lần
đọc và ghi các đối tượng cơ sở dữ liệu:
 +Để đọc một đối tượng cơ sở dữ liệu, trước tiên
nó được đưa vào bộ nhớ chính (cụ thể là một số
khung trong vùng đệm) từ đĩa, và sau đó giá trị
của nó được sao chép vào một biến chương
trình.
 +Để ghi một đối tượng cơ sở dữ liệu, một bản
sao trong bộ nhớ của đối tượng trước tiên được
sửa đổi và sau đó được ghi vào đĩa. 4
1. Khái niệm giao dịch (tiếp theo)
Tại sao giao dịch?
 Hệ thống cơ sở dữ liệu thường được
truy cập bởi nhiều người dùng hoặc quy
trình cùng một lúc.
 Cả truy vấn và sửa đổi.
 Không giống như các hệ điều hành, hỗ
trợ tương tác của các quy trình, DMBS
cần giữ cho các quy trình khỏi các
tương tác rắc rối.
5
Example: Bad Interaction
 Hãy xem xét hoạt động chuyển 100 đô la từ tài khoản được đánh số 123
sang tài khoản 456. Trước tiên, chúng tôi có thể kiểm tra xem có ít nhất
100 đô la trong tài khoản 123 hay không và nếu có, chúng tôi thực hiện
hai bước sau:
 1. Thêm $100 vào tài khoản 456 bằng câu lệnh cập nhật SQL:
UPDATE Tài khoản
 SET balance = balance + 100
 TRONG ĐÓ acctNo = 456;
 2.Trừ $100 từ tài khoản 123 bằng câu lệnh cập nhật SQL:
 CẬP NHẬT tài khoản
 SET balance = balance - 100
 TRONG ĐÓ acctNo = 123;
 Điều gì xảy ra nếu có lỗi sau Bước (1) nhưng trước Bước (2).

6
2. Bốn thuộc tính quan trọng của giao dịch
(Giao dịch ACID)
 Các giao dịch ACID là:
 Nguyên tử: Toàn bộ giao dịch hoặc không có giao dịch
nào được thực hiện. Người dùng không phải lo lắng về
ảnh hưởng của các giao dịch không hoàn tất.
 Nhất quán: Các ràng buộc cơ sở dữ liệu được bảo tồn.
Đảm bảo tài sản này của một giao dịch là trách nhiệm
của người dùng.
 Cô lập : Nó xuất hiện với người dùng như thể chỉ có một
quá trình thực thi tại một thời điểm.
 Bền : một giao dịch đã được hoàn thành thành công, ảnh
hưởng của nó sẽ vẫn tồn tại ngay cả khi hệ thống gặp sự
cố trước khi tất cả các thay đổi của nó được phản ánh
trên đĩa. 7
2. Four important properties of transactions (cont’d)

Ví dụ về chuyển tiền
 Transaction to transfer $50 from account A to account B:
1.read(A)
2. A := A – 50
3.write(A)
4.read(B)
5. B := B + 50
6.write(B)
 Yêu cầu tính nhất quán – tổng của A và B không thay đổi khi thực
hiện giao dịch.
 Yêu cầu về tính nguyên tử - nếu giao dịch không
thành công sau bước 3 và trước bước 6, hệ thống
phải đảm bảo rằng các bản cập nhật của nó không
được phản ánh trong cơ sở dữ liệu, nếu không sẽ
dẫn đến sự không nhất quán. 8
Example of Fund Transfer (Contd.)
 Yêu cầu về độ bền - một khi người dùng đã được thông báo
rằng giao dịch đã hoàn tất (tức là việc chuyển 50 đô la đã
diễn ra), các bản cập nhật cho cơ sở dữ liệu của giao dịch
phải tồn tại mặc dù không thành công.

 Yêu cầu cách ly - nếu giữa bước 3 và 6, một giao


dịch khác được phép truy cập cơ sở dữ liệu được
cập nhật một phần, nó sẽ thấy cơ sở dữ liệu
không nhất quán (tổng A + B sẽ nhỏ hơn mức
cần thiết).Có thể được đảm bảo tầm thường
bằng cách chạy các giao dịch tuần tự, đó là lần
lượt. Tuy nhiên, thực hiện nhiều giao dịch đồng
thời có những lợi ích đáng kể, như chúng ta sẽ
thấy. 9
3. Trạng thái giao dịch
 Hoạt động, trạng thái ban đầu; Giao dịch vẫn ở trạng thái này
trong khi nó đang thực hiện
 Hoàn thành một phần, sau khi tuyên bố cuối cùng đã
được thực hiện.
 Không thành công, sau khi phát hiện ra rằng việc thực
hiện bình thường không còn có thể tiến hành.
 Bị hủy bỏ, sau khi giao dịch đã được khôi phục và cơ sở
dữ liệu được khôi phục về trạng thái trước khi bắt đầu
giao dịch. Hai tùy chọn sau khi nó đã bị hủy bỏ:
 Khởi động lại giao dịch - chỉ khi không có lỗi logic
nội bộ
 Giết giao dịch
 Cam kết, sau khi hoàn thành thành công.
10
Sơ đồ chuyển đổi trạng thái
minh họa các trạng thái để
thực hiện giao dịch

11
4. Thực hiện đồng thời & Lịch trình
 Nhiều giao dịch được phép chạy đồng thời trong hệ
thống. Ưu điểm là:
 Tăng mức sử dụng bộ xử lý và đĩa, dẫn đến
thông lượng giao dịch tốt hơn: một giao dịch có
thể sử dụng CPU trong khi một giao dịch khác
đang đọc hoặc ghi vào đĩa
 Giảm thời gian phản hồi trung bình cho các
giao dịch: các giao dịch ngắn không cần phải chờ
đợi phía sau các giao dịch dài.
 Sơ đồ kiểm soát đồng thời - cơ chế để đạt được
sự cô lập, tức là kiểm soát sự tương tác giữa các
giao dịch đồng thời để ngăn chúng phá hủy tính
nhất quán của cơ sở dữ liệu 12
4. Concurrent Executions & Schedules (cont’d)

 Lịch biểu – trình tự chỉ ra thứ tự thời gian


trong đó các hướng dẫn của các giao dịch
đồng thời được thực hiện
 Lịch biểu cho một tập hợp các giao
dịch phải bao gồm tất cả các hướng dẫn
của các giao dịch đó
 phải giữ nguyên thứ tự mà các hướng
dẫn xuất hiện trong mỗi giao dịch riêng lẻ.

13
4. Concurrent Executions & Schedules (cont’d)
Lên lịch giao dịch
 Lịch trình tuần tự: Lịch trình không xen kẽ các hành động của
các giao dịch khác nhau.
 Lịch trình tương đương: Đối với bất kỳ trạng thái cơ
sở dữ liệu nào, ảnh hưởng (trên tập hợp các đối
tượng trong cơ sở dữ liệu) của việc thực hiện lịch
trình đầu tiên giống hệt với hiệu quả của việc thực
hiện lịch trình thứ hai.
 Lịch trình khả tuần tự: Một lịch biểu tương đương với
lịch biểu tuần tự nào đó.
 (Lưu ý: Nếu mỗi giao dịch duy trì tính nhất quán, mọi
lịch biểu khả tuần tự có thể sẽ duy trì tính nhất quán.)
14
Example Schedules
 Hãy để T1 chuyển 50 đô la từ A sang B và T2 chuyển
10% số dư từ A sang B. Sau đây là lịch trình nối tiếp
(Biểu 1 trong văn bản), trong đó T1 được theo sau
bởi T2.
T1 T2
Read(a)
A := A – 50
Write(A)
Read(B)
B:= B+50
Write(B)
Commit
Read(A)
A:= A – A*0.1
Write(A)
Read(B)
B := B – B *0.1
Write(B)
Commit 15
Example Schedule (Cont’d)
 Hãy để T1 và T2 là các giao dịch được xác định trước đó. Lịch
trình sau đây (Lịch trình 2 trong văn bản) không phải là lịch
biểu tuần tự, nhưng nó tương đương với Lịch trình 1.

S.1 T1 T2 S.2 T1 T2
Read(a) Read(a)
A := A – 50 A := A – 50
Write(A) Write(A)
Read(B) Read(A)
B:= B+50 A:= A – A*0.1
Write(B) Write(A)
Commit Read(B)
Read(A) B:= B+50
A:= A – A*0.1 Write(B)
Write(A) Commit
Read(B) Read(B)
B := B +B *0.1 B := B +B *0.1
Write(B) Write(B)
Commit Commit
Trong cả Bảng 1 và 2, tổng A + B được giữ nguyên.
16
Example Schedules (cont’d)
 Lịch biểu đồng thời sau đây (Biểu 3 trong văn bản) không bảo toàn
giá trị của tổng A + B.

T1 T2 T1 T2
Read(a) Read(a)
A := A – 50 A := A – 50
Write(A) Read(A)
Read(B) A:= A – A*0.1
B:= B+50 Write(A)
Write(B) Read(B)
Commit Write(A)
Read(A) Read(B)
A:= A – A*0.1 B:= B+50
Write(A) Write(B)
Read(B) Commit
B := B +B *0.1 B := B +B *0.1
Write(B) Write(B)
Commit Commit

17
Tính khả tuần tự
 Giả sử ban đầu - Mỗi giao dịch duy trì tính nhất quán của cơ sở dữ
liệu.
 Do đó, việc thực hiện tuần tự một tập hợp các giao dịch
duy trì tính nhất quán của cơ sở dữ liệu.
 Lịch biểu được gọi là khả tuần tự nếu nó tương đương
với lịch biểu tuần tự. Các hình thức tương đương lịch
biểu khác nhau làm nảy sinh các khái niệm về:
 1. Khả tuần tự xung đột
 2. Khả tuần tự View
 Chúng tôi bỏ qua các hoạt động khác ngoài hướng dẫn
đọc và ghi và chúng tôi giả định rằng các giao dịch có
thể thực hiện tính toán tùy ý trên dữ liệu trong bộ đệm
cục bộ ở giữa đọc và ghi. Lịch biểu đơn giản của chúng
tôi chỉ bao gồm lệnh đọc và ghi. 18
Khả tuần tự xung đột
 Hướng dẫn li và lj của các giao dịch Ti và Tj tương ứng,
xung đột nếu và chỉ khi tồn tại một số mục Q được truy
cập bởi cả li và lj, và ít nhất một trong những lệnh này là
ghi Q.
 1. li = read(Q), lj = read(Q). li and lj don’t conflict.
2. li = read(Q), lj = write(Q). They conflict-RW conflict
3. li = write(Q), lj = read(Q). They conflict-WR conflict
4. li = write(Q), lj = write(Q). They conflict-WW conflict
 Theo trực giác, một cuộc xung đột giữa li và lj buộc một
trật tự thời gian (logic) giữa chúng. Nếu li và lj liên tiếp
trong một lịch trình và họ không xung đột, kết quả của họ
sẽ vẫn giữ nguyên ngay cả khi họ đã được thay thế trong
lịch trình.
19
Khả tuần tự xung đột(tiếp theo)
Lịch biểu tuần tự Lịch biểu xung đột WR
T1 T2 T1 T2
Read(a) Read(a)
A := A – 50 A := A – 50
Write(A) Write(A)
Read(B) Read(A)
B:= B+50 A:= A – A*0.1
Write(B) Write(A)
Commit Read(B)
Read(A) B := B – B *0.1
A:= A – A*0.1 Write(B)
Write(A) Commit
Read(B) Read(B)
B := B – B *0.1 B:= B+50
Write(B) Write(B)
Commit Commit

20
Tương đương xung đột
 Nếu một lịch biểu S có thể được biến đổi thành lịch biểu S
'bằng một loạt các hoán đổi các lệnh không xung đột,
chúng ta nói rằng S và S 'là xung đột tương đương.

 Lịch biểu S được gọi là khả tuần tự xung đột nếu


nó tương đương xung đột với lịch biểu tuần tự.
 Ví dụ về lịch biểu không phải là khả tuần tự xung
đột: T3 T4 read(Q)
write(Q) write(Q)Chúng tôi
không thể đổi chỗ các lệnh trong lịch biểu trên
để có được lịch tuần tự<T3, > T4 hoặc lịch nối
tiếp < T4, T3 >. 21
Conflict Serializability (Cont’d)
 Biểu 4 dưới đây có thể được chuyển thành Biểu 1, lịch
biểu tuần tự trong đó T2 tuân theo T1, bằng một loạt
các hoán đổi các lệnh không xung đột. Do đó, Biểu 4 là
khả tuần tự xung đột Schedule 1
T1 T2 T1 T2
Schedule 4 Read(a) Read(a)
A := A – 50 A := A – 50
Write(A) Write(A)
Read(A) Read(B)
A:= A – A*0.1 B:= B+50
Write(A) Write(B)
Read(B) Commit
B:= B+50 Read(A)
Write(B) A:= A – A*0.1
Commit Write(A)
Read(B) Read(B)
B := B – B *0.1 B := B – B *0.1
Write(B) Write(B)
22
Commit Commit
Khả tuần tự View
 Hãy để S và S 'là hai lịch biểu với cùng một tập hợp các transaction giống
nhau. S và S' được gọi là tương đương View nếu đáp ứng ba điều kiện sau:
 1. Đối với mỗi đối tượng Q, nếu giao dịch Ti đọc giá trị ban đầu
của Q trong biểu S, thì giao dịch Ti phải, trong biểu S', cũng
phải đọc giá trị ban đầu của Q.
 2. Đối với mỗi đối tượng Q, nếu giao dịch Ti thực hiện đọc (Q)
trong biểu S và giá trị đó trước đó được tạo bởi giao dịch Tj
(nếu có), thì giao dịch Ti trong biểu S 'cũng phải đọc giá trị của
Q mà giá trị Q trước đó cũng được tạo ra bởi giao dịch Tj.
 3. Đối với mỗi đối tượng Q, giao dịch (nếu có) thực hiện thao
tác ghi (Q) cuối cùng trong lịch biểu S thì phải thực hiện thao
tác ghi (Q) cuối cùng trong biểu S'.
 Có thể thấy, sự tương đương lượt xem cũng hoàn toàn dựa
trên việc đọc và ghi một mình.

23
Khả tuần tự View
 Lịch trình S được gọi là khả tuần tự View nếu nó tương đương
View với lịch biểu tuần tự.

 Mọi lịch biểu khả tuần tự View mà mà nó không khả tuần tự xung
đột thì Schedule
sẽ xảy ra9hiện tượng ghi mù(Blind
Serial Schedule
writes).
 MọiT3lịch biểu T4 T6 T3 T4 T6
khả tuần tự xung đột cũng là khả tuần tự
Read(Q) Read(Q)
View, mặcWrite(Q)
dù điều ngược lại là không đúng.
Write(Q)
Write(Q)
 Biểu Write(Q)
9 – là một lịchWrite(Q)
biểu khả tuần tự View nhưngWrite(Q)
không
khả tuần tự xung đột.

24
5. Tính khả phục hồi
Cần giải quyết ảnh hưởng của thất bại giao dịch đối
với các giao dịch đang chạy đồng thời.
 Lịch biểu khả phục hồi - nếu một giao dịch Tj đọc một đối tượng dữ
liệu được viết trước đó bởi một giao dịch Ti thì thao tác commit của
Ti xuất hiện trước thao tác commit của Tj.

T8 T9
 If T8 should abort,Read(A)
T9 would have read (and possibly shown to
the user) an inconsistent
Write(A) database state. Hence database
must ensure that schedules areRead(A)
recoverable.
Commit
 Lịch biểu sau (Biểu 11) không khả phục hồi được nếu T9 cam
Read(B)
kết ngay sau khi đọc
Commit
25
5. Tính khả phục hồi
 Phục hồi lan truyền - một lỗi giao dịch duy nhất dẫn đến một
loạt các giao dịch rollback. Xem xét lịch trình sau đây mà chưa
có giao dịch nào được cam kết (vì vậy lịch trình có thể khôi
phục được)

Nếu T10 thất bại, T11 và T12 cũng phải được quay trở lại.
 Có thể dẫn đến việc hoàn tác một lượng công việc đáng
kể

26
5. Tính khả phục hồi
 Lịch biểu không lan truyền - không thể xảy ra
khôi phục theo tầng; đối với mỗi cặp giao dịch
Ti và Tj sao cho Tj đọc một mục dữ liệu được
viết trước đó bởi Ti, hoạt động cam kết của Ti
xuất hiện trước hoạt động đọc của Tj (tức là
các giao dịch chỉ có thể đọc các giá trị được
viết bởi các giao dịch đã cam kết.)
 Mọi lịch biểu không lan truyền cũng khả phục
hồi.
T8 T9
Read(A)
Write(A)
Write(B)
Commit
Read(A)
Commit 27
6. Kiểm soát đồng thời dựa trên
khóa
 Giao thức khóa được sử dụng rộng rãi nhất, được gọi là
Strict Two – Phase Locking , hoặc Strict 2PL, có hai quy tắc:
 1.Nếu một giao dịch T muốn đọc (tương ứng, sửa
đổi) một đối tượng, trước tiên nó yêu cầu share –
lock (tương ứng, độc quyền) trên đối tượng.
 2.Tất cả các khóa được giữ bởi một giao dịch được
giải phóng khi giao dịch hoàn tất.
 (Non -strict) 2PL Variant: Giải phóng khóa bất cứ
lúc nào, nhưng không thể có được khóa sau khi giải
phóng bất kỳ khóa nào.
 Nếu một Xact giữ một khóa X trên một đối tượng,
không có Xact nào khác có thể có được khóa (S
hoặc X) trên đối tượng đó. 28
6. Kiểm soát đồng thời dựa trên khóa (tiếp
theo)
 Người quản lý phục hồi của DBMS chịu trách nhiệm đảm
bảo tính nguyên tử và độ bền của giao dịch. Nó đảm bảo
tính nguyên tử bằng cách hoàn tác các hành động của
các giao dịch không cam kết và độ bền bằng cách đảm
bảo rằng tất cả các hành động của các giao dịch đã cam
kết đều tồn tại sau sự cố hệ thống, (ví dụ: kết xuất lõi
do lỗi bus) và lỗi phương tiện (ví dụ: đĩa bị hỏng).
 2PL strict chỉ cho phép lịch biểu khả tuần tự.

29
6.Lock-Based Concurrency Control (cont’d)
 Theo lịch trình minh họa 2PL nghiêm ngặt với thực
hiện nối tiếp và hành động xen kẽ

30
Hủy bỏ giao dịch
 Nếu một giao dịch Ti bị hủy bỏ, tất cả các hành động của nó phải được
hoàn tác. Không chỉ vậy, nếu Tj đọc một đối tượng được viết lần cuối
bởi Ti, Tj cũng phải bị hủy bỏ!
 Hầu hết các hệ thống tránh hủy bỏ xếp tầng như vậy
bằng cách chỉ phát hành khóa của giao dịch tại thời điểm
cam kết.
 Nếu Ti viết một đối tượng, Tj chỉ có thể đọc nó sau khi Ti
cam kết.
 Để hoàn tác các hành động của một giao dịch bị hủy bỏ,
DBMS duy trì nhật ký trong đó mọi lần ghi được ghi lại.
Cơ chế này cũng được sử dụng để phục hồi sau sự cố hệ
thống: tất cả các Xact đang hoạt động tại thời điểm xảy
ra sự cố đều bị hủy bỏ khi hệ thống hoạt động trở lại.
31
The Log
 Các hành động sau đây được ghi lại trong nhật ký:
 Ti viết một đối tượng: giá trị cũ và giá trị mới.
 Bản ghi nhật ký phải đi vào đĩa trước khi trang thay đổi!
 Ti cam kết / hủy bỏ: một bản ghi nhật ký chỉ ra hành động
này.
 Các bản ghi nhật ký được xâu chuỗi lại với nhau bằng id Xact,
vì vậy thật dễ dàng để hoàn tác một Xact cụ thể.
 Nhật ký thường được đảo mặt và lưu trữ trên bộ nhớ ổn định.
 Tất cả các hoạt động liên quan đến nhật ký (và trên thực tế,
tất cả các hoạt động liên quan đến CC như khóa / mở khóa,
xử lý bế tắc, v.v.) đều được DBMS xử lý minh bạch.

32
7. Recovering From a Crash
 Khi trình quản lý khôi phục được gọi sau sự cố, khởi động lại sẽ tiến
hành theo 3 giai đoạn (thuật toán khôi phục Aries ):
 Phân tích: Quét nhật ký về phía trước (từ điểm kiểm tra
gần đây nhất) để xác định tất cả Xacts đang hoạt động tại
thời điểm xảy ra sự cố và tất cả các trang bẩn (tức là các
thay đổi chưa được ghi vào đĩa) trong vùng đệm tại thời
điểm xảy ra sự cố.
 Làm lại: Làm lại tất cả các cập nhật cho các trang bẩn
trong vùng đệm, nếu cần (nghĩa là chỉ áp dụng cho các
giao dịch đã cam kết. Ngoài ra, thông tin được lưu trữ bởi
ARIES và trong các trang dữ liệu sẽ cho phép ARIES xác
định xem thao tác được làm lại có thực sự được áp dụng
cho cơ sở dữ liệu hay không và do đó không cần phải áp
dụng lại), để đảm bảo rằng tất cả các bản cập nhật đã
đăng nhập trên thực tế được thực hiện và ghi vào đĩa.
33
7. Recovering From a Crash (contd.)
 Hoàn tác: Nhật ký được quét ngược và các hoạt động của
các giao dịch đang hoạt động tại thời điểm xảy ra sự cố
được hoàn tác theo thứ tự ngược lại. (Một số cẩn thận phải
được thực hiện để xử lý trường hợp tai nạn xảy ra trong
quá trình phục hồi!)

34
Example

35
assignment
Có nhiều chi tiết hơn và các tiêu chuẩn mới hơn có nhiều lệnh
hơn để xử lý giao dịch.
 Hãy nghiên cứu chúng trong SQL Server và
Oracle

36
Transaction support in SQL
Steps in a Transaction
 Step 1: Transaction starts with the BEGIN
TRANSACTION statement
 Step 2: When the INSERT, SELECT,
UPDATE, or DELETE statement is
detected, SQL Server allocates a new
transaction ID, and creates a log record in
the memory
 Step 3: All altered rows are recorded in the
logs, and the data page is then changed in
memory 37
Steps in a Transaction (contd.)
 Step 4: The COMMIT TRANSACTION câu
lệnh ghi các bản ghi vào nhật ký giao dịch
của cơ sở dữ liệu
(hoặc Tuyên bố ROLLBACK khiến giao dịch kết thúc,
nhưng bằng cách hủy bỏ.)
Step 5: Thay đổi được áp dụng cho cơ sở dữ liệu
(hoặc Không ảnh hưởng đến cơ sở dữ liệu)

38
COMMIT
 The SQL statement COMMIT causes a
transaction to complete.
 It’s database modifications are now
permanent in the database.

39
ROLLBACK
 Câu lệnh SQL ROLLBACK cũng khiến
giao dịch kết thúc, nhưng bằng cách
hủy bỏ.
 Không có ảnh hưởng đến cơ sở dữ liệu.
 Các lỗi như chia cho 0 hoặc vi phạm
ràng buộc cũng có thể gây ra rollback,
ngay cả khi lập trình viên không yêu
cầu.
40
Types of Transaction

 Rõ ràng
Tiềm ẩn
Tự động cam kết

41
Giao dịch rõ ràng
 Giao dịch được định cấu hình thủ công,
trong đó người dùng xác định rõ ràng sự
bắt đầu và kết thúc của giao dịch
Sử dụng BẮT ĐẦU GIAO DỊCH để bắt đầu
Sử dụng CAM KẾT GIAO DỊCH hoặc CAM KẾT CÔNG
VIỆC để hoàn thành thành công
Sử dụng ROLLBACK TRANSACTION hoặc ROLLBACK
WORK để hủy

42
Implicit Transactions
 Được kích hoạt với
Tuyên bố SET IMPLICIT_TRANSACTIONS ON
Khi được bật, SQL Server bắt đầu giao dịch ngầm bất cứ khi
nào gặp các từ khóa sau:


ALTER TABLE 
UPDATE

REVOKE 
DROP

CREATE 
OPEN

SELECT 
FETCH

DELETE 
TRUNCATE

INSERT TABLE

GRANT
43
Autocommit Transactions

 Chế độ quản lý giao dịch mặc định


Mọi tuyên bố đều được cam kết hoặc quay trở lại khi nó được
hoàn thành

44
Example: Interacting Processes
 Giả sử mối quan hệ Bán (thanh, bia, giá)
thông thường và giả sử rằng Joe's Bar chỉ
bán Bud với giá 2,50 đô la và Miller với giá
3,00 đô la.
 Sally đang truy vấn Sells với mức giá cao
nhất và thấp nhất mà Joe tính phí.
 Joe quyết định ngừng bán Bud và Miller,
nhưng chỉ bán Heineken với giá 3,50 đô la.
45
Sally’s Program
 Sally thực hiện hai câu lệnh SQL sau đây
được gọi là (min) và (max) để giúp
chúng ta nhớ những gì chúng làm.(max)
SELECT MAX(price) FROM Sells
WHERE bar = ’Joe’’s Bar’;
(min) SELECT MIN(price) FROM Sells
WHERE bar = ’Joe’’s Bar’;

46
Joe’s Program
 At about the same time, Joe executes the
following steps: (del) and (ins).
(del) DELETE FROM Sells
WHERE bar = ’Joe’’s Bar’;
(ins) INSERT INTO Sells
VALUES(’Joe’’s Bar’, ’Heineken’, 3.50);

47
Interleaving of Statements
 Mặc dù (max) phải đứng trước (min) và
(del) phải đứng trước (ins), không có
ràng buộc nào khác về thứ tự của các
câu lệnh này, trừ khi chúng tôi nhóm
các báo cáo của Sally và / hoặc Joe
thành các giao dịch.

48
Example: Strange Interleaving
 Suppose the steps execute in the order
(max)(del)(ins)(min).
Joe’s Prices: {2.50,3.00} {2.50,3.00} {3.50}

Statement: (max) (del) (ins) (min)


Result: 3.00 3.50

 Sally sees MAX < MIN!

49
Fixing the Problem by Using
Transactions
 Nếu chúng ta nhóm các báo cáo của Sally
(max) (min) thành một giao dịch, thì cô
ấy không thể thấy sự mâu thuẫn này.
 Cô ấy nhìn thấy giá của Joe tại một số
thời điểm cố định.
 Trước hoặc sau khi anh ta thay đổi giá,
hoặc ở giữa, nhưng MAX và MIN được
tính từ cùng một mức giá.
50
Another Problem: Rollback
 Giả sử Joe thực hiện (del) (ins), không
phải là một giao dịch, nhưng sau khi
thực hiện các câu lệnh này, hãy suy
nghĩ tốt hơn về nó và đưa ra một câu
lệnh ROLLBACK.
 Nếu Sally thực hiện các câu lệnh của
mình sau (ins) nhưng trước khi rollback,
cô ấy sẽ thấy một giá trị, 3,50, chưa
bao giờ tồn tại trong cơ sở dữ liệu.
51
Solution
 Nếu Joe thực hiện (del) (ins) như một
giao dịch, người khác không thể nhìn
thấy hiệu lực của nó cho đến khi giao
dịch thực hiện COMMIT.
 Nếu giao dịch thực hiện ROLLBACK thay
vào đó, thì không bao giờ có thể nhìn
thấy tác động của nó.

52
Isolation Levels
 SQL định nghĩa bốn cấp độ cách ly =
lựa chọn về những tương tác nào được
cho phép bởi các giao dịch thực hiện
cùng một lúc.
 Chỉ có một cấp độ ("có thể tuần tự
hóa") = giao dịch ACID.
 Mỗi DBMS thực hiện các giao dịch theo
cách riêng của nó.
53
Choosing the Isolation Level
 Within a transaction, we can say:
SET TRANSACTION ISOLATION LEVEL X

where X =
1. SERIALIZABLE
2. REPEATABLE READ
3. READ COMMITTED
4. READ UNCOMMITTED
54
Serializable Transactions
 Nếu Sally = (max) (min) và Joe = (del)
(ins) là mỗi giao dịch và Sally chạy với
mức cách ly SERIALIZABLE, thì cô ấy
sẽ thấy cơ sở dữ liệu trước hoặc sau
khi Joe chạy, nhưng không phải ở giữa.

55
Mức độ cách ly là lựa chọn cá nhân
 Lựa chọn của bạn, ví dụ: chạy tuần tự
hóa, chỉ ảnh hưởng đến cách bạn xem cơ
sở dữ liệu, không ảnh hưởng đến cách
người khác nhìn thấy nó.
 Ví dụ: Nếu Joe chạy có thể đăng nhiều
kỳ, nhưng Sally thì không, thì Sally có thể
không thấy giá cho Joe's Bar.
 tức là, đối với Sally như thể cô ấy đang
chạy giữa giao dịch của Joe.
56
Read-Commited Transactions
 Nếu Sally chạy với mức độ cô lập READ
COMMITTED, thì cô ấy chỉ có thể xem
dữ liệu đã cam kết, nhưng không nhất
thiết phải cùng một dữ liệu mỗi lần.
 Ví dụ: Trong READ COMMITTED, cho
phép xen kẽ (max) (del) (ins) (min),
miễn là Joe cam kết.
 Sally nhìn thấy MAX < PHÚT.
57
Repeatable-Read Transactions
 Yêu cầu giống như cam kết đọc, cộng
với: nếu dữ liệu được đọc lại, thì mọi
thứ được nhìn thấy lần đầu tiên sẽ được
nhìn thấy lần thứ hai.
 Nhưng lần đọc thứ hai và sau đó cũng
có thể thấy nhiều bộ dữ liệu hơn.

58
Example: Repeatable Read
 Giả sử Sally chạy dưới REPEATABLE
READ, và thứ tự thực hiện là (max)(del)
(ins)(min).
 (tối đa) thấy giá 2,50 và 3,00.
 (min) có thể thấy 3,50, nhưng cũng
phải thấy 2,50 và 3,00, vì chúng đã
được nhìn thấy trên đọc trước đó bởi
(max).
59
Read Uncommitted
 Một giao dịch chạy trong READ
UNCOMMIT có thể xem dữ liệu trong cơ
sở dữ liệu, ngay cả khi nó được viết bởi
một giao dịch chưa cam kết (và có thể
không bao giờ).
 Ví dụ: Nếu Sally chạy theo READ
UNCOMMITTED, cô ấy có thể thấy giá
3,50 ngay cả khi Joe sau đó hủy bỏ.
60
Example
EXEC SQL WHENEVER SQLERROR GOTO UNDO;
EXEC SQL SET TRANSACTION
READ WRITE
DIAGNOSTIC SIZE 5
ISOLATION LEVEL SERIALIZABLE;
EXEC SQL INSERT INTO EMPLOYEE (Fname, Lname, Ssn, Dno,
Salary) VALUES ('Robert', 'Smith', '991004321', 2, 35000);
EXEC SQL UPDATE EMPLOYEE
SET Salary = Salary * 1.1 WHERE Dno = 2;
EXEC SQL COMMIT;
GOTO THE_END;
UNDO: EXEC SQL ROLLBACK;
THE_END: ... ;
61
assignment
Có nhiều chi tiết hơn và các tiêu chuẩn mới hơn có nhiều lệnh
hơn để xử lý giao dịch.
 Hãy nghiên cứu chúng trong SQL Server và
Oracle

62

You might also like