Bài giảng Cơ sở dữ liệu - Chương 6: Bẫy lỗi (Trigger)
Nội dung
1. Khái niệm.
2. Công dụng trigger
3. Các dạng ràng buộc toàn vẹn
4. Ràng buộc dữ liệu toàn vẹn với trigger
5. Cơ chế hoạt động của trigger
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Bạn đang xem tài liệu "Bài giảng Cơ sở dữ liệu - Chương 6: Bẫy lỗi (Trigger)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Cơ sở dữ liệu - Chương 6: Bẫy lỗi (Trigger)
8/25/2017 1 Chương 6. Bẫy lỗi (Trigger) GV: Lê Thị Minh Nguyện Email: nguyenltm@huflit.edu.vn Nội dung 1. Khái niệm. 2. Công dụng trigger 3. Các dạng ràng buộc toàn vẹn 4. Ràng buộc dữ liệu toàn vẹn với trigger 5. Cơ chế hoạt động của trigger Hệ quản trị Cơ sở dữ liệu 2 3 • Trigger là một dạng đặc biệt của thủ tục lưu trữ và thực thi tự động khi người dùng áp dụng câu lệnh cập nhật dữ liệu lên một table chỉ định nhằm mục đích đảm bảo tính toàn vẹn dữ liệu. Nếu trigger bị vi phạm, câu lệnh sẽ không được thực thi 1. Khái niệm 4 • Đảm bảo tính toàn vẹn trong CSDL • Kiểm soát dữ liệu hiện có trong CSDL khi thay đổi giá trị của một mẩu tin trong bảng • Kiểm tra dữ liệu nhập có thỏa điều kiện không • Kiểm chứng khi xóa mẩu tin trong bảng • Tự động cập dữ liệu trong bảng B khi bảng A thay đổi 2. Công dụng trigger 8/25/2017 2 3. Các dạng ràng buộc toàn vẹn ??? Hệ quản trị Cơ sở dữ liệu 5 6 4.1. Thêm mới mẩu tin 4.2. Xóa mẩu tin 4.3. Sửa mẩu tin 4. Ràng buộc dữ liệu toàn vẹn với trigger 7 • Kiểm tra ràng buộc dữ liệu • Khoá ngoại • Miền giá trị • Liên bộ trên một quan hệ • Liên thuộc tính trong cùng một quan hệ • Liên thuộc tính của nhiều quan hệ 4.1. Thêm mới mẩu tin 4.2. Xóa mẩu tin • Phụ thuộc khóa ngoại • Liên bộ liên quan hệ Hệ quản trị Cơ sở dữ liệu 8 8/25/2017 3 9 • Khoá ngoại • Miền giá trị • Liên bộ trên một quan hệ • Liên thuộc tính trong một quan hệ • Liên thuộc tính của nhiều quan hệ 4.3. Sửa mẩu tin 10 • 3 biến cố kích hoạt 1 trigger • INSERT • UPDATE • DELETE • Trigger lưu trữ dữ liệu của mẩu tin vừa thêm vào một table mới có tên là INSERTED • Trigger lưu trữ dữ liệu của mẩu tin vừa xoá vào một table có tên là DELETED. • Trigger lưu trữ dữ liệu của mẩu tin vừa cập nhật là sự phối hợp của 2 table DELELTED và INSERTED 5. Cơ chế hoạt động của trigger 11 • Cú pháp: CREATE TRIGGER Tên_trigger ON tên_table| tên_view AFTER | INSTEAD OF biến_cố_kích_hoạt_trigger AS -- Các câu lệnh T-SQL Có thể thay bằng FOR. After là mặc định 5. Cơ chế hoạt động của trigger (tt) 12 CREATE TRIGGER Them_HH ON HANG_HOA AFTER INSERT AS Select * From Inserted • Thêm dữ liệu INSERT HANG_HOA(MaHH, TenHH) VALUES(‘TV01’, ‘Tivi Sony’) 5. Cơ chế hoạt động của trigger (tt) 8/25/2017 4 13 CREATE TRIGGER SUA_HH ON HANG_HOA AFTER UPDATE AS Select * From Inserted Select * From Deleted • Cập nhật dữ liệu UPDATE HANG_HOA SET Ten_HH = ‘Man Hinh Sony’ WHERE MaHH = ‘TV01’ 5. Cơ chế hoạt động của trigger (tt) 14 CREATE TRIGGER Xoa_HH ON HANG_HOA AFTER DELETE AS Select * From Inserted Select * From Deleted • Xóa dữ liệu DELETE HANG_HOA WHERE MaHH = ‘TV01’ 5. Cơ chế hoạt động của trigger (tt) 15 • HOADON_DH(MaHD, NgayDH, MaKH) • PHIEU_XUAT(MaPX, NgayXuat, #MaHD ) • CHITIET_DH(MAHD, MaHH, SoLuong, DonGia) • Xây dựng trigger trong bảng PHIEU_XUAT để kiểm tra các ràng buộc toàn vẹn dữ liệu khi người dùng thêm mới thông tin của một phiếu xuất hàng cho một bảng hoá đơn đặt hàng trước đó. Các ràng buộc toàn vẹn dữ liệu bao gồm. • Khoá ngoại: cần kiểm tra số đặt hàng phải tồn tại trong bảng đơn đặt hàng. • Miền giá trị: cần kiểm tra ngày giao hàng phải ở sau ngày đặt hàng. Ví dụ 1 16 CREATE TRIGGER tg_PhieuXuat_Insert ON PHIEU_XUAT FOR INSERT AS DECLARE @NgayHD datetime, @ErrMsg varchar(200) -- Kiểm tra số hoá đơn đã có trong bảng DONDH không? IF NOT EXISTS(Select * From Inserted I, HOADON_DH D Where I.MaHD= D.MaHD) Begin Rollback Tran Raiserror(‘Số đơn đặt hàng không tồn tại’, 16,1) Return End Ví dụ 1 (tt) 8/25/2017 5 17 --Tính ra ngày đặt hàng Select @NgayDH=NgayDH From HoaDon_DH D, Inserted I Where D.MaHD = I.MaHD -- Kiểm tra ngày giao hàng phải sau ngày đặt hàng IF @NgayDH < (Select ngayxuat From Inserted) Begin Set @ErrMsg = ‘ngày giao hàng phải ở sau ngày:’+ Convert(char(10), ngayDH, 103 ) Raierror(@ErrMsg,16,1) Rollback tran End Ví dụ 1 (tt) 18 •Kiểm tra ràng buộc • Kiểm tra ràng buộc khóa ngoại • Ví dụ: khi xoá một số hoá đơn đặt hàng trong bảng HOADON_DH cần phải kiểm tra các RBTV dữ liệu sau: • Kiểm tra xem đơn đặt hàng bị xoá đã được xuất hàng chưa? Nếu đã được xuất rồi thì thông báo không thể xoá đơn đặt hàng được. • Ngược lại thì xoá dữ liệu liên quan bên bảng chi tiết đơn đặt hàng (CHITIET_HD) Ví dụ 2 19 CREATE TRIGGER tg_HOADON_Delete ON HOADON_DH FOR DELETE AS DECLARE @SoPX char(5), @ErrMsg char(200), @Delete_Err int -- Kiểm tra xem đơn hàng đã được xuất chưa IF EXISTS(Select MaPX From PHIEU_XUAT Where MaHD IN(Select MaHD From Deleted)) Begin Select @MaPX = MaPX From PHIEU_XUAT Where MaHD In(Select MaHD From Deleted) Set @ErrMsg = ‘Đơn đặt hàng đã được nhập theo ’+ ‘số xuất hàng ’+ @SoPX + char(13) + ‘.Không thể huỷ được’ RaiseError(@ErrMsg,16,1) Rollback tran End Ví dụ 2 (tt) 20 Else Begin -- Xoá tự động chi tiết các đơn đặt hàng liên quan Delete FROM CHITIET_DH Where MaHD In(Select MaHD From DELETED) Set @Delete_Err = @@ERROR IF @Delete_Err 0
File đính kèm:
- bai_giang_co_so_du_lieu_chuong_6_bay_loi_trigger.pdf