Giao tác – Transaction
1
N i dung:ộ
Các khái niệm giao tác và khóa:
Các thuộc tính của giao tác
Các loại giao tác
Các mức giao tác
Một số vấn đề liên quan giao tác
Giao dịch và khóa
Bài tập thực hành giao tác
2
Giao tác - transaction
Một transaction hay một giao tác là một loạt
các hoạt động xảy ra được xem như một
công việc đơn. Nghĩa là hoặc thành công
toàn bộ hoặc không làm gì cả.
Ví dụ: chúng ta muốn chuyển $500 từ
account A sang account B. Như vậy công
việc này cần các bước sau:
Trừ $500 từ account A.
Cộng $500 từ account B.
3
Giao tác - transaction
Khi nào giao tác được xem là hoàn tất
(commited)?
Nếu vì lý do nào đó chỉ thực hiện được bước
1?
4
Giao tác – transaction (tt)
5
Mô hình giao tác trong SQL
Giao tác SQL được định nghĩa dựa trên các
câu lệnh sau:
BEGIN TRANSACTION: Bắt đầu một giao tác.
SAVE TRANSACTION: Quay lui trở lại đầu giao
tác hoặc một điểm đánh dấu trước đó trong giao
tác.
COMMIT TRANSACTION: Đánh dấu điểm kết
thúc một giao tác (khi thành công).
ROLLBACK [WORK]: Quay lui trở lại đầu giao
tác.
COMMIT [WORK]: Đánh dấu kết thúc giao tác.
6
Giao tác (tt)
Ví dụ: Lệnh ROLLBACK TRANSACTION.
BEGIN TRANSACTION Test_trans
UPDATE Employees SET LastName=‘Phuc”
WHERE EmployeeID=1
ROLLBACK TRANSACTION Test_trans
7
Giao tác (tt)
Câu lệnh: SAVE TRANSACTION tên
Đánh dấu một vị trí trong giao tác.
Trạng thái hiện tại được ghi lại trong giao tác.
Câu lệnh: ROLLBACK TRANSACTION tên
Hủy bỏ những thay đổi từ điểm đánh dấu đến
trước câu lệnh này.
8
Giao tác (tt)
9
Giao tác (tt)
Ví dụ: dùng điểm đánh dấu để quay lại.
BEGIN TRANSACTION Test_trans
SAVE TRANSACTION save_tras
UPDATE Employees SET LastName=‘Phuc”
WHERE EmployeeID=1
ROLLBACK TRANSACTION save_tras
10
Giao tác (tt)
Giao tác lồng nhau: các giao tác có thể được lồng nhau theo từng cấp.
Ví dụ: Ta có bảng SINHVIEN(MSSV,TENSV)
Ta xét giao tác sau:
BEGIN TRANSACTION
INSERT INTO SV VALUES('01','DONG')
INSERT INTO SV VALUES('02','TAY')
SAVE TRANSACTION S1
INSERT INTO SV VALUES('03','NAM')
ROLLBACK TRANSACTION S1
INSERT INTO SV VALUES('04','BAC')
COMMIT TRANSACTION
11
Các thu c tộ ính c a giao d chủ ị
Tính hoàn chỉnh (Atomicity): Giao dịch phải là một
thao tác trọn vẹn. Các thành phần của một giao dịch là
không thể phân chia được.
Tính nhất quán (Consistency): Khi giao dịch hoàn
thành thì dữ liệu của CSDL phải luôn luôn ở trạng thái
nhất quán.
Tính riêng biệt (Isolation): Tất cả các giao dịch đều
phải thể hiện được tính riêng biệt khi có sự thay đổi
dữ liệu trong csdl.
Tính bền vững (Durability): Giao dịch chỉ ở trạng thái
bền vững khi giao dịch được xác nhận.
12
Các loại giao dịch
Giao dịch tường minh
Giao dịch ngầm định
Giao dịch xác định tự động
13
Các mức giao dịch
Read Uncommited: Không đưa ra các khóa dùng chung
và do đó có thể đọc dữ liệu khi chưa xác nhận.
Read commited: Đây là mức mặc định riêng trong
SQL. SQL Server sử dung khóa dùng chung trong quá
trình đọc dữ liệu. Giao dịch khác đọc được dữ liệu chỉ
khi giao dịch này được xác nhận.
Repeatable Read: Ở mức này, các khóa sẽ được đặt
trên tất cả dữ liệu được truy vấn. Do đó, giao dịch khác
sẽ không thể cập nhật dữ liệu đã bị khóa.
Serializable: Đây là mức an toàn dữ liệu cao nhất. Ở
mức này, nó ngăn chặn người dùng khác trong lúc cập
nhật dữ liệu đến khi giao dịch tương ứng hoàn thành.
14
M t s v n đ :ộ ố ấ ề
Time TRANSACTION 1 TRANSACTION 2
1
2
3
4
5
6
7
8
9
10
BEGIN TRAN
READ_ITEM(X)
X=X-5
WRITE_ITEM(X)
ROLLBACK
X=50
X=45
X=45
X=50
BEGIN TRAN
READ_ITEM(X)
X=X+10
WRITE_ITEM(X)
X=45
X=55
X=55
MỨC UNCOMMITTED
15
Khóa - Lock
Là cơ cấu cho phép ngăn ngừa các hành động trên
đối tượng có thể gây ra xung đột. Có nghĩa là bạn
không thể làm gì trên đối tượng đó nếu có người
khác đang truy cập.
Chế độ Lock:
Shared locks: người dùng có thể đọc dữ liệu nhưng
không thể sửa.
Exclusive locks: ngăn ngừa 2 người sử dụng cùng cập
nhật mẩu tin cùng lúc.
Update locks: là kết hợp giữa Shared locks và Exclusive
locks, ở chế độ Shared locks khi lệnh Update chưa thực
thi, thực thi rồi ở chế độ Exclusive locks.
Khóa - Lock
Schema locks: khi định nghĩa bảng bị thay đổi,
ví dụ: khi thêm cột mới vào bảng,…
Bulk update locks: đây là khóa đặc biệt.
Ví dụ: nếu bạn muốn chắc rằng không ai đang
thay đổi dữ liệu, dùng từ khóa NOLOCK.
SELECT * FROM EMPLOYEES WITH
(NOLOCK)
Giao dịch và khóa
Bên trong các mục dữ liệu giao dịch luôn được khóa
Exclusive lock: được dùng với các xử lý như insert,
update và delete. Các giao dịch khác không được phép
đọc hay thay đổi các mục dữ liệu mà nó đang được x-
lock.
Share lock (S-lock): được dùng với các xử lý để đọc
thông tin. Các giao dịch khác được phép đọc các mục
dữ liệu nhưng nó không được phép thay đổi.
Một S-lock chỉ được yêu cầu khi không có X-Lock.
Một X-lock chỉ được yêu cầu khi giao dịch khác không
có S-lock trên mục dữ liệu đó.
18
Giải quyết vấn đề đọc dữ liệu rác:
Time TRANSACTION 1 TRANSACTION 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BEGIN TRAN
S-LOCK
READ_ITEM(X)
UNLOCK
X-LOCK
X=X-5
WRITE_ITEM(X)
ROLLBACK
X=50
X=45
X=45
X=50
BEGIN TRAN
S-LOCK
WAIT
S-LOCK
READ_ITEM(X)
UNLOCK
X-LOCK
X=X+10
WRITE_ITEM(X)
X=50
X=60
X=60
19
Bài thực hành 01
Lần lượt thực hiện các thao tác ứng với các bài
1, 2 …và 7 trên 2 file “Transaction1 và
Transaction2” (xem 2 file gửi kèm).
20