Giao Tác
1
Nội dung
www.themegallery.com
1
Giới thiệu
2
Giao tác
3
Điều khiển đồng thời
2
Giới thiệu
Ví dụ 1:
TaiKhoan (MaTK, HoTen, SoDu)
Xét store procedure spRutTien
◦ Bước 1: Đọc số dư tài khoản
◦ Bước 2: Kiểm tra số dư tài khoản
◦ Bước 3: Nếu đủ tiền
◦ Bước 3.1: Cập nhật tài khoản với số dư mới
◦ Bước 3.2: Trả tiền ra máy ATM
◦ Bước 4: Nếu khơng đủ tiền thì kết thúc
www.themegallery.com
3
Giới thiệu
Ví dụ 1:
Nhận xét
◦ Nếu bước 3.1 thực hiện được và 3.2 bị lỗi
è cập nhật mà không trả tiền
◦ Nếu bước 3.2 thực hiện được mà 3.1 bị lỗi
è trả tiền mà không cập nhật tài khoản
Ø Dữ liệu bị sai
Mong muốn
◦ Bước 3.1 và 3.2 phải được thực hiện hết hoặc
không thực hiện được bước nào.
www.themegallery.com
4
Giới thiệu
Ví dụ 2:
Xét store procedure spChuyenTien
◦ Tham số @tk1, @tk2, @sotien
◦ Bước 1: Đọc số dư của @tk1 è @sodu1
◦ Bước 2: Cập nhật số dư của tài khoản 1
UPDATE TaiKhoan
SET SoDu = @sodu1 - @sotien
◦ Bước 3: Đọc số dư của tài khoản 2
UPDATE TaiKhoan
SET SoDu = @sodu2 + @sotien
◦ Bước 4: Thông báo thành công
www.themegallery.com
5
Giới thiệu
Ví dụ 2:
Nhận xét
◦ Nếu bước 2 thành công, bước 3 bị lỗi è SoDu
của tài khỏan @tk1 bị trừ nhưng SoDu của
@tk2 không được tăng lên.
Ø Bị lỗi
Mong muốn
◦ Bước 2 và bước 3 phải được thực hiện hết
hoặc khơng có bước nào được thực hiện.
www.themegallery.com
6
Giới thiệu
Ví dụ 3:
DocGia(MaDG, HoTen, NgaySinh)
NgLon(MaDG, SoNha, Dng, Phng, Quan)
• Xét store procedure: spThemDGNguoiLon
◦ Bước 1: Xác định mã đọc giả
◦ Bước 2: Insert vào bảng DocGia
◦ Bước 3: Kiểm tra tuổi của đọc giả
◦ Bước 4: Nếu không đủ tuổi thì thơng báo lỗi
và kết thúc
◦ Bước 5: Ngược lại thì Insert vào bảng NgLon
www.themegallery.com
7
Giới thiệu
Ví dụ 3:
Nhận xét:
◦ Giả sử gọi spThemNguoiLon để thêm một đọc
giả mà nhỏ hơn 18 tuổi
Giải quyết
à Có 1 bộ thêm vào bảng DocGia
???
à Có 0 bộ thêm vào bảng NgLon
Ø Dữ liệu bị saiKhai báo các bước muốn có đặc
Mong muốn: điểm như trên vào trong 1 giao tác
◦ Bước 2 và bước 5 phải được thực hiện hết,
hoặc không thực hiện bước nào hết.
www.themegallery.com
8
Nội dung
www.themegallery.com
1
Giới thiệu
2
Giao tác
3
Điều khiển đồng thời
9
Giao tác
• Giao tác là một tập các lệnh có truy xuất đến
CSDL
• Giao tác phải đảm bảo tính ACID
Giao tác
www.themegallery.com
10
Tính ACID
Mọi thao tác phải
được thực hiện,
hoặc đều bị hủy
Atomicity
(nguyên tố)
Durability
(bền vững)
Khi giao tác thực hiện
thành cơng thì mọi thay
đổi của nó phải được lưu
bền vững trong CSDL
www.themegallery.com
Tất cả dữ liệu phải ở
trạng thái nhất quán sau
khi giao tác kết thúc
Consistency
(nhất quán)
Isolation
(cô lập)
Một giao tác thực hiện
đồng thời với giao tác
khác thì khơng bị ảnh
hưởng bởi giao tác khác
11
Khai báo giao tác
• Một số từ khóa:
◦ Begin tran: Bắt đầu giao tác
◦ Commit : Kết thúc giao tác (thành công)
q Dữ liệu sẽ được xác nhận trên CSDL
◦ Rollback: Kết thúc giao tác (thất bại)
q Dữ liệu sẽ được khơi phục về trạng thái
ban đầu
• Khi nào thì rollback ?
◦ Khi có một lệnh nào đó trong giao tác bị lỗi và
cần phải khôi phục lại dữ liệu.
www.themegallery.com
12
Xác định lỗi
• Lỗi do hệ thống: Lỗi do những câu lệnh
INSERT, UPDATE, DELETE
◦ Dựa vào biến @@error
[0: thành công, != 0: mã lỗi]
IF @@error != 0
BEGIN
-- Các câu lệnh xử lý khi bị lỗi
END
◦ Lưu ý: Sau mỗi câu lệnh Select, Insert,
Update, Delete thì biến @@error chứa trạng
thái (thành công/ thất bại) của việc thực thi
câu lệnh.
www.themegallery.com
13
Xác định lỗi
• Lỗi do người dùng:
◦ Đọc giả thêm vào nhỏ hơn 18 tuổi
◦ Xác định lỗi dựa vào đoạn code do người dùng
viết.
◦ Ví dụ:
IF @tuoi < 18
BEGIN
-- Các câu lệnh xử lý khi bị lỗi
END
www.themegallery.com
14
Cú pháp khai báo
Bước 1: Bổ sung từ khóa khai báo bắt đầu
(begin tran), kết thúc giao tác (commit).
Bước 2: Sau mỗi câu lệnh Select, Insert,
Update, Delete è Kiểm tra lỗi hệ thống è Nếu
có lỗi thì có những xử lý phù hợp.
IF @@error != 0
BEGIN
raiserror (‘Lỗi rồi !!!’, 16, 1)
rollback –- một cách hợp lý
END
www.themegallery.com
15
Cú pháp khai báo
• Bước 3: Sau mỗi lần kiểm tra lỗi của người
dùng è Nếu có lỗi thì có những xử lý phù hợp.
IF [điều kiện gây ra lỗi thỏa mãn]
BEGIN
raiserror ('Lỗi rồi !!!' 16, 1)
rollback –- một cách hợp lý
END
www.themegallery.com
16
CSDL Quản lý thư viện
•
•
•
•
•
•
•
•
DocGia (ma_DocGia, ho, tenlot, ten, ngaysinh)
Nguoilon (ma_DocGia, sonha, duong, quan, dienthoai, han_sd)
TreEm (ma_DocGia, ma_DocGia_nguoilon)
Tuasach (ma_tuasach, tuasach, tacgia, tomtat)
Dausach (isbn, ma_tuasach, ngonngu, bia, trangthai)
Cuonsach (isbn, ma_cuonsach, tinhtrang)
DangKy (isbn, ma_DocGia, ngay_dk, ghichu)
Muon (isbn, ma_cuonsach, ma_DocGia, ngay_muon,
ngay_hethan)
• QuaTrinhMuon(isbn, ma_cuonsach, ngay_muon, ma_DocGia,
ngay_hethan, ngay_tra, tien_muon, tien_datra, tien_datcoc,
ghichu)
www.themegallery.com
17
CSDL Quản lý thư viện
www.themegallery.com
18
Nội dung
www.themegallery.com
1
Giới thiệu
2
Giao tác
3
Điều khiển đồng thời
19
Bối cảnh
Website bàn hàng
www.themegallery.com
20
Bối cảnh
Database trước giao tác
Đọc DS SP
Đọc DS SP
Thêm SP vào giỏ
Thêm SP vào giỏ
Thêm PMH
Thêm PMH
Thêm CT PMH
Thêm CT PMH
Cập nhật số SP
Cập nhật số SP
Database sau giao tác
www.themegallery.com
21
Bối cảnh
vMơ hình ứng dụng đa người dùng
Một CSDL lưu tại Server và nhiều clients đồng
thời truy cập và thao tác trên cùng CSDL
vGiao tác Ti của client X đang thao tác trên
CSDL, trong khi đó một giao tác Tj của client
Y cũng đang thực hiện truy xuất và thay đổi
CSDL.
ðCác Ti và Tj có thể xung đột, tranh chấp lẫn
nhau.
www.themegallery.com
22
Giao tác lồng nhau
STT
T1
1 Begin tran
2
3
read (A)
4
5
….
n
read (A)
T2
Begin tran
write (A)
Commit tran
n+1 Commit tran
www.themegallery.com
23
Giao tác lồng nhau
v Tham số @@trancount cho biết số transaction đang
thực thi.
v Khi khai báo transaction tường minh, phải rollback
hoặc commit tường minh để:
§ Giải phóng tài ngun transaction đang chiếm giữ.
§Tránh cản trở việc thực hiện của các transaction
khác.
www.themegallery.com
24
Vấn đề truy xuất đồng thời
Dirty read
Unrepeatable read
Phantom
Lost update
www.themegallery.com
Đọc dữ liệu rác
Khơng thể đọc lại dữ liệu
Bóng ma
Mất dữ liệu đã cập nhật
25