Chương 7
Giao Tác
Nội dung
www.themegallery.com
1
Giới thiệu
2
Giao tác
3
Điều khiển đồng thời
Giới thiệu
Đặt hàng
Website bàn hàng
ĐH ko có
chi tiết
Giải quyết
???
Chi tiết_2 ĐH
Chi tiết_1 ĐH
CSDL sai
www.themegallery.com
Đơn Hàng
Cập nhật SL
Nội dung
www.themegallery.com
1
Giới thiệu
2
Giao tác
3
Điều khiển đồng thời
Định nghĩa
Giao tác
Đơn Hàng
Chi tiết_2 ĐH
Chi tiết_1 ĐH
Cập nhật SL
www.themegallery.com
Giao tác là chuỗi các hành
động tương tác trên CSDL
Giao tác phải đảm bảo tính
chất ACID
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
Khai báo giao tác
Giao tác
Đơn Hàng
Chi tiết_2 ĐH
Chi tiết_1 ĐH
Cập nhật SL
Begin Tran Bắt đầu giao tác
INSERT Đơn hàng
INSERT Chi tiết đơn hàng 1
INSERT Chi tiết đơn hàng 2
Update Cập nhật số sản phẩm
End Tran Kết thúc giao tác
www.themegallery.com
Database
trước giao tác
SELECT
SELECT
INSERT
UPDATE
DELETE
Database sau
giao tác
www.themegallery.com
INSERT
UPDATE
Lỗi phần
mềm
Database
trước giao tác
ROLLBACK
Database
trước giao tác
ROLLBACK
GIAO TÁC
Tình huống giao tác
SELECT
INSERT
Lỗi phần
cứng
Ví dụ
Database trước giao tác
Begin Tran Bắt đầu giao tác
INSERT Đơn hàng
INSERT Chi tiết đơn hàng 1
INSERT Chi tiết đơn hàng 2
Update Cập nhật số sản phẩm
End Tran Kết thúc giao tác
Database trước giao tác
www.themegallery.com
Cú pháp
Create proc TenProc
As
Begin
Bắt đầu giao tác
Begin tran
Kết thúc giao tác hủy
/*giao tác bị lỗi*/
giao tác, đưa CSDL về
trạng thái ban đầu
rollback tran
/*giao tác thành công*/
Kết thúc giao tác thành
commit tran
công giao tác được lưu
bền vững xuống CSDL
End
www.themegallery.com
Ví dụ
Create proc DatHang
As
Begin
Begin tran
Insert into DonHang
Insert into CT_DonHang
Update SanPham
commit tran
End
www.themegallery.com
Trạng thái CSDL
trước giao tác
Giao tác:
Bắt đầu bởi
Begin Tran
Kết thúc bởi
Commit tran
Trạng thái CSDL tại
điểm đánh dấu a
Trạng thái CSDL tại
điểm đánh dấu b
Khi rollback chỉ quay
lại tới vị trí đánh dấu.
Các câu lệnh sau đó
vẫn thực hiện
Trạng thái CSDL
sau giao tác
www.themegallery.com
Ví dụ 1
BEGIN TRANSACTION giaotac3
UPDATE diemthi
SET diemlan2=0
WHERE diemlan2 IS NULL
SAVE TRANSACTION a
UPDATE monhoc
SET sodvht=4
WHERE sodvht=3
Không được thực hiện
ROLLBACK TRANSACTION a
UPDATE monhoc
SET sodvht=2
WHERE sodvht=3
COMMIT TRANSACTION giaotac3
www.themegallery.com
Ví dụ 2
BEGIN TRANSACTION giaotac4
UPDATE diemthi
SET diemlan2=0
WHERE diemlan2 IS NULL
SAVE TRANSACTION a
UPDATE monhoc
SET sodvht=4
WHERE sodvht=3
ROLLBACK TRANSACTION giaotac4
UPDATE monhoc
SET sodvht=2
WHERE sodvht=3
COMMIT TRANSACTION giaotac4
www.themegallery.com
Toàn bộ giao
tác bị hủy
Nội dung
www.themegallery.com
1
Giới thiệu
2
Giao tác
3
Điều khiển đồng thời
Bối cảnh
Website bàn hàng
www.themegallery.com
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
Bối cảnh
Mơ 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
Giao 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
Giao tác lồng nhau
STT
T1
1 Begin tran
2
3
read (A)
4
5
….
n
read (A)
n+1 Commit tran
www.themegallery.com
T2
Begin tran
write (A)
Commit tran
Giao tác lồng nhau
Tham số @@trancount cho biết số transaction đang
thực thi.
Khi khai báo transaction tường minh, phải rollback
hoặc commit tường minh để:
Giải phóng tài nguyên 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
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
Dirty read
STT
T1
1
2
Begin tran
3
write (A)
//Insert | Update
Begin tran
4
5
6
7
8
T2
read (A)
If (Lỗi)
Rollback tran
Commit tran
Commit tran
T2 đọc dữ liệu (rác) đã bị T1 hủy.
www.themegallery.com
Unrepeatable read
STT
1
2
T1
T2
Begin tran
Begin tran
3
4
Read(A)
5
6
7
Read(A)
Write(A)
//Update | Delete
Commit tran
Commit tran
T1 đọc dữ liệu giá trị A khác nhau ở 2 lần
đọc.
www.themegallery.com
Phantom
STT
1
2
T1
T2
Begin tran
Begin tran
3
4
Read(A)
5
6
7
Read(A, B)
write(B)
//Insert | Update
Commit tran
Commit tran
T1 đọc tập dữ liệu 2 lần khác nhau
www.themegallery.com
Lost update
STT
1
2
3
4
5
6
7
8
T1
T2
Begin tran
Begin tran
Read(A)
Read(A)
Write(A’)
Write(A’’)
Commit tran
Commit tran
Dữ liệu được ghi bởi T2 đã bị ghi đè bởi T1
www.themegallery.com