Trước tiên, trình kích hoạt là các đoạn mã được chạy khi một sự kiện cụ thể (ví dụ: INSERT/UPDATE/DELETE trên một bảng cụ thể) xảy ra trong cơ sở dữ liệu. Trình kích hoạt được thực hiện ngầm định TRƯỚC KHI hoặc AFER câu lệnh và trình kích hoạt DML không thể được thực hiện một cách rõ ràng như các thủ tục được lưu trữ.
Ngoài ra còn có hai loại trình kích hoạt - bộ kích hoạt CẤP TUYỆT VỜI và bộ kích hoạt ROW LEVEL.
Trình kích hoạt mức hiển thị được kích hoạt TRƯỚC KHI hoặc SAU một câu lệnh được thực thi.
Trình kích hoạt ROW LEVEL được kích hoạt TRƯỚC KHI hoặc SAU một thao tác được thực hiện trên mỗi hàng riêng lẻ bị ảnh hưởng bởi thao tác.
Vì vậy, chúng tôi có 12 loại trigger:
1. BEFORE INSERT STATEMENT
2. BEFORE INSERT ROW
3. AFTER INSERT STATEMENT
4. AFTER INSERT ROW
5. BEFORE UPDATE STATEMENT
6. BEFORE UPDATE ROW
7. AFTER UPDATE STATEMENT
8. AFTER UPDATE ROW
9. BEFORE DELETE STATEMENT
10. BEFORE DELETE ROW
11. AFTER DELETE STATEMENT
12. AFTER DELETE ROW
Nhiều trigger có thể được mã hóa cho một sự kiện với trật tự của họ được ưu tiên thực hiện đề cập.
Bất cứ khi nào chúng tôi chạy truy vấn DML (INSERT/UPDATE/DELETE) trên cơ sở dữ liệu, truy vấn đó được chạy trong một giao dịch. Do đó khi một truy vấn chạy -
- Bảng này được khóa
- Các kiểm tra DBMS cho trigger chạy TRƯỚC tuyên bố là để được thực thi
- Thực hiện các câu lệnh SQL thực tế hàng-by-hàng.
- Kích hoạt TRƯỚC KHI cho MACHI ROW được tìm kiếm. Nếu tìm thấy, thực hiện.
- Kiểm tra lỗi. Nếu có, hãy khôi phục các thay đổi được thực hiện bởi câu lệnh hoặc trình kích hoạt của nó.
- Bất kỳ SAU KHI GỬI ROW được kích hoạt và thực thi.
- Bất kỳ SAU KHI trình kích hoạt STATEMENT được tìm thấy và thực thi.
DBMS khác nhau quản lý giao dịch khác nhau. Tham khảo tài liệu của họ để biết chi tiết.
Nhiều DBMS chỉ giữ nguyên trình kích hoạt ở định dạng văn bản, không giống như các thủ tục được lưu trữ được biên dịch. Thực hành tốt nhất là gọi các thủ tục được lưu trữ từ bên trong thân máy kích hoạt vì các thủ tục được lưu trữ có hiệu suất nhanh hơn nhiều so với các trình kích hoạt.
Tôi nghĩ rằng điều này có lẽ nên là [dba.se] ..; nhưng tôi sẽ theo dõi nó vì tôi thực sự không biết. – Ben