Các trigger - bài giảng
Trang 1Chương 9
Các trigger
Trang 2 Các thủ tục lưu tăng tốc các câu truy vấn, làm cho việc truy cập dữ liệu nhanh hơn, hỗ trợ các modul lập trình, duy trì tính nhất quán và tăng cường tính bảo mật.
Trang 3 Có hai loại thủ tục lưu :
Thủ tục lưu hệ thống đề cập đến phương pháp quản trị dữ liệu và cập nhật thông tin vào các bảng
Thủ tục lưu do người dùng định nghĩa
Câu lệnh CREATE PROCEDURE được sử dụng để tạo ra thủ tục lưu
Câu lệnh EXECUTE được sử dụng để chạy thủ tục lưu
Các tham biến có thể được sử dụng để nhập vào hoặc xuất ra các giá trị từ thủ tục lưu
Trang 4 Chỉ định WITH RECOMPILE với lệnh EXECUTE
Câu lệnh ALTER PROCEDURE được sử dụng để chỉnh sửa một thủ tục lưu
Các mã trả về và câu lệnh RAISERROR được dùng để thông báo cho người sử dụng về các lỗi xuất hiện trong thủ tục lưu
Trang 5Mục đích
Định nghĩa các trigger
Liệt kê các lợi ích của trigger
Hiểu và sử dụng lệnh CREATE TRIGGER T-SQL
Mô tả các bảng Inserted và Deleted được sử dụng bởi trigger
Giải thích các kiểu trigger: INSERT, UPDATE, và DELETE
Xác định được các lệnh SQL nào không thể sử dụng trong các trigger
Khai báo trigger xếp theo tầng và trigger xếp lồng vào nhau
Khai báo các trigger INSTEAD OF
Chỉ ra các nhân tố tác động đến việc thực thi hành trigger
Trang 6Các Trigger
Các trigger là các thủ tục lưu, chúng được thực thi để phản ứng lại các thao tác chèn, cập nhật, hoặc xóa trong một bảng
Các trigger được kích hoạt một cách tự động khi có một trong các thao tác trên xuất hiện
Các trigger được sử dụng một cách phổ biến để ép các thao tác tuân theo các quy tắc nhất định
Các trigger đảm bảo tính toàn vẹn và tính nhất quán của dữ liệu
Trang 8Trigger Fired
Derek
Inserted
Trang 9Sử dụng Trigger
So sánh kiểu dữ liệu
Đọc dữ liệu từ các bảng nằm trong cơ sở dữ liệu khác
Thay đổi theo tầng hoặc xoá liên tục các bảng liên quan trong một cơ sở dữ liệu
Huỷ bỏ các thay đổi không đúng
Tuân theo các giới hạn,các giới hạn đó phức tạp hơn việc bắt lỗi bằng ràng buộc CHECK
Thực thi các thủ tục lưu cục bộ và các thủ tục lưu từ
xa
Trang 11Hướng dẫn tạo các Trigger
Một trigger có thể kết hợp ba thao tác thực hiện trên một bảng như INSERT, UPDATE, và DELETE
Một trigger thích ứng với một bảng đơn
Tuỳ chọn WITH ENCRYPTION có thể được sử dụng để làm ẩn các khai báo của một trigger đối với người sử dụng.Tuy nhiên, một trigger đã được mã hoá sẽ không thể bị giải mã
Một trigger có thể tham chiếu đến một view hoặc một bảng tạm thời, nhưng không thể kết hợp với chúng
Một trigger có thể bao gồm các câu lệnh SQL với số lượng bất kì
Trang 12Hướng dẫn tạo các Trigger
Mặc định, chỉ có người tạo ra cơ sở dữ liệu đó mới có quyền tạo một trigger trong nó Quyền này không thể chuyển giao
Một trigger chỉ có thể được tạo trong cơ sở dữ liệu hiện hành Tuy nhiên, trigger có thể tham chiếu đến các đối tượng nằm trong cơ sở dữ liệu khác
Trang 13Sử dụng bảng Inserted và
Deleted
Các Trigger truy nhập tới hai bảng logic có tên là Inserted và Deleted
Bảng Inserted và Deleted chứa ảnh của dữ liệu
trước và sau quá trình cập nhật
Giản đồ tương đồng với bảng đã được cập nhật
Dữ liệu trong bảng không bị tác động bởi thao tác cập
nhật sẽ không nằm trong bảng Inserted và Deleted.
Trang 14Các kiểu Trigger
Trang 15Các Trigger INSERT
Một trigger INSERT được thực thi bất cứ khi nào có thao tác chèn thêm dữ liệu vào một bảng
trigger INSERT thực thi các thao tác dưới đây:
Chèn một bản sao của hàng mới vao bảng
Inserted.
Kiểm tra hàng mới trong bảng Inserted, để xác
định xem dữ liệu được chèn vào có hợp lệ hay không
Nếu tìm thấy các giá trị trong hàng chèn vào phù hợp điều kiện chỉ ra, chèn chúng vào trong bảng trigger
Trang 17Các Trigger INSERT
Trang 18Các Trigger UPDATE
Một trigger UPDATE được thực hiện khi một tác vụ cập nhật thực thi trên bảng
Nó thực thi các tác vụ dưới đây:
Di chuyển hàng dữ liệu gốc vào bảng logic
Trang 19PRINT ‘You cannot modify the payment
terms for an order’
ROLLBACK TRANSACTION
END
Trang 20Column-level UPDATE
Triggers Contd…
Trang 21PRINT ‘You cannot assign a discount
greater than 12 percent’
ROLLBACK TRANSACTION
END
Trang 22Các Trigger UPDATE
mức bảng
Trang 23 Chèn các hàng được xoá vào bảng Deleted.
Kiểm tra các hàng trong bảng Deleted để xác định
các tác vụ trigger sẽ được thực hiện như thế nào
Trang 25Các Trigger DELETE
Trang 26Các lệnh SQL ko thể sử dụng
Trong Trigger
Trang 27trigger dây chuyền
Các trigger dây chuyền được sử dụng để bắt buộc sự toàn vẹn trong tham chiếu
Khi một thay đổi xuất hiện trong một bảng, các
trigger dây chuyền sửa đổi dữ liệu trong các bảng liên quan
các trigger không thể được sử dụng để thực hiện việc cập nhật dây chuyền hoặc xoá mà ảnh hưởng đến các ràng buộc của cac khoá chính và khoá ngoài
Các trigger được thực hiện sau khi các ràng buộc
được kiểm tra; nếu một tác vụ bỏ qua một ràng buộc, trigger không được thực thi
Trang 28trigger lồng nhau
Các trigger lồng nhau khi một tác vụ trong một trigger này khởi tạo một trigger khác, và tới lượt nó có thể lại khởi tạo một trigger khác nữa và cứ như vậy
Các trigger có thể lồng nhau tới 32 mức
Để cho phép lồng các trigger, chúng ta sử dụng thủ
tục lưu hệ thống sp_configure như sau:
sp_configure ‘nested trigger’, 1
Để ko cho phép các trigger lồng nhau, chúng ta thực hiện lệnh dưới đây:
sp_configure ‘nested trigger’, 0
Trang 29Các Trigger INSTEAD OF
Một trigger INSTEAD OF chứa đoạn mã thay thế các
lệnh thao tác với cơ sở dữ liệu gốc
Các trigger INSTEAD OF hữu dụng nhất khi việc sửa
đổi dữ liệu được thực thi trên view mà chúng không
thể cập nhật theo cách thông thường
Các trigger INSTEAD OF có thể dựa trên chỉ một tác
vụ sửa đổi dữ liệu
Trang 31DELETE employee WHERE emp_id IN
(SELECT emp_id FROM DELETED)
Trang 32Các Trigger và Hiệu suất
Chi phí dành cho các trigger là nhỏ
Hầu hết thời gian đòi hỏi để chạy một trigger là dành cho việc tham chiếu đến các bảng khác, có thể nằm
trong các thiết bị cơ sở dữ liệu
Các bảng Deleted và Inserted luôn có mặt trong bộ
nhớ
Trang 33 Lệnh CREATE TRIGGER được sử dụng để tạo một trigger.
Các trigger truy nhập tới các bảng logic Inserted và Deleted Các bảng này chứa các hình ảnh của dữ liệu
trước đó, và sau quá trình cập nhật
Trang 34Tổng kết
Các kiểu trigger:
INSERT: Thực hiện mỗi khi xuất hiện việc thêm mới
dữ liệu vào bảng Các trigger này đảm bảo rằng dữ liệu được chèn vào bảng là hợp lệ
UPDATE: Thực hiện khi một tác vụ cập nhật xảy ra
trên một bảng Các trigger này có thể được thi hành ở mức bảng hoặc mức cột
DELETE: Thực hiện khi dữ liệu được xoá khỏi một
bảng
Các trigger dây chuyền sửa đổi dữ liệu trong các bảng liên quan, nếu một thay đổi xuất hiện trong một bảng
Trang 35Tổng kết
Các trigger lồng nhau khi một tác vụ trong một trigger này khởi tạo một trigger khác, và tới lượt nó có thể lại khởi tạo một trigger khác nữa và cứ như vậy
Thủ tục lưu hệ thống sp_configure được sử dụng để cho phép hoặc không cho phép lồng các trigger
trigger INSTEAD OF chứa đoạn mã thay thế các lệnh thao tác với dữ liệu gốc
Các trigger INSTEAD OF hữu dụng khi việc sửa đổi dữ liệu được thực hiện trên view mà chúng không thể cập nhật theo cách thông thường
Thời gian đòi hỏi để thực thi một trigger chủ yếu dành nhiều cho việc tham chiếu đến các bảng khác hơn là dành