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.. Tính riêng biệt Isolation: Tất cả các giao dịch đều phải
Trang 1Giao tác – Transaction
1
Trang 2N 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
Trang 3Giao 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
Trang 4Giao 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
Trang 5Giao tác – transaction (tt)
5
Trang 6Mô 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
Trang 7Giao 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
Trang 8Giao 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
Trang 9Giao tác (tt)
9
Trang 10Giao 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
Trang 11Giao 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
Trang 12Cá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
Trang 13Cá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
Trang 14Cá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
Trang 15M 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
Trang 16Khó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.
Trang 17Khó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)
Trang 18Giao 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
Trang 19Giải quyết vấn đề đọc dữ liệu rác:
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
Trang 20Bà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