Trigger trong SQL là gì?
Trigger trong SQL được hiểu là đoạn Procedure code. Chúng vận hành khi xảy ra sự kiện nào đó. Để kích hoạt Trigger ở SQL, bạn có thể dùng nhiều sự kiện khác nhau. Chẳng hạn như thay đổi cấu trúc bảng, chèn hàng vào bảng hay xóa hàng trong bảng….
Trigger trong SQL được hiểu là đoạn Procedure code và chỉ vận hành khi xảy ra sự kiện nào đó
Dưới đây là những điểm khiến Trigger SQL trở nên khác biệt so với các Stored Procedures:
- Trigger không thể làm thủ công được.
- Bạn sẽ không có cơ hội nhận thông số trong Trigger.
- Bên cạnh đó việc khôi phục Transaction trong Trigger là không thể.
Vấn đề không dùng được tham số không phải là hạn chế để nhận thông tin từ sự kiện. Lúc này bạn sẽ chọn lựa thay thế khác để có thể lấy thông tin từ các sự kiện.
Cấu trúc về lệnh của Trigger
Để tạo Trigger trong SQL, người dùng cần tới câu lệnh CREATE TRIGGER trong ảnh sau:
Câu lệnh CREATE TRIGGER
Trong đó:
- Sự kiện: Là các yếu tố UPDATE, INSERT, DELETE.
- Thời gian kích hoạt: Là BEFORE/AFTER. BEFORE được dùng khi muốn xử lý một hành động trước khi đổi thay, còn AFTER dùng khi cần xử lý hành động sau khi thay đổi.
- Trình kích hoạt cần liên kết với bảng cụ thể, từ khóa ON được sử dụng với mục đích xác định.
Trong SQL Server có mấy lớp Trigger?
Trong SQL có hai lớp Trigger khác nhau. Những lớp này đều có đặc điểm riêng. Bảng sau sẽ giúp bạn hiểu rõ điều này:
Trong SQL có hai lớp Trigger khác nhau là DDL Trigger và DML Trigger
Trigger trong SQL |
Chi tiết |
✔️ DDL Trigger |
DDL chính là viết tắt của Data Definition Language. Lớp Trigger này chỉ kích hoạt khi thay đổi cấu trúc của sự kiện như sửa đổi, tạo hoặc bỏ bảng. Bên cạnh đó ĐL Trigger có thể xuất hiện tại các sự kiện như cập nhật thống kê hay sửa đổi bảo mật ở server. |
✔️ DML Trigger |
DML(Data Modification Language) Trigger là loại Trigger khá phổ biến hiện nay. Để kích hoạt bạn cần dùng tới câu lệnh sửa đổi dữ liệu. Có thể là câu lệnh nhập bảng, chèn hàng/ cột vào bảng hoặc xóa bảng. Trong DML Trigger có 2 loại gồm: – AFTER hoặc FOR [[UPDATE, INSERT, DELETE]: Được dùng sau khi kết thúc lệnh kích hoạt. – INSTEAD OF [UPDATE, INSERT, DELETE]: Đây là trạng thái ngược với FOR/ AFTER. Chúng dùng để thực thi, chứ không phải thay đổi câu lệnh kích hoạt. Hay bạn có thể hiểu đây là Trigger thay thế được cho lệnh kích hoạt. Đây là chọn lựa hữu ích khi bạn cần tới tính toàn vẹn của Database chéo. |
Trigger có vai trò như thế nào trong SQL?
Điểm nổi bật của Relational Databases là tính nhất quán trong dữ liệu. Tức là các thông tin lưu trữ tại Database đều là nhất quán trong mọi Transaction và Session.
SQL server như Relational Databases thực hiện điều này bằng cách đơn giản đó chính là thực thi ràng buộc những Foreign key và Primary key.
Tuy nhiên, ở SQL, bạn sẽ không có cơ hội thực thi được tính toàn vẹn tham chiếu qua Foreign key nếu bảng thuộc server hoặc Database khác nhau. Cách duy nhất để có thể xử lý lúc này đó chính là dùng Trigger trong SQL.
Trigger SQL dùng để làm gì?
Vậy Trigger trong SQL được dùng khi nào? Có 2 trường hợp cần dùng tới Trigger, đó chính là:
Trigger được dùng để tiến hành kiểm tra ràng buộc trên các dòng của bảng hoặc nhiều bảng, đồng thời ngăn chặn việc xóa Data quan trọng ngoài ý muốn
- Thứ nhất, dùng Trigger để tiến hành kiểm tra ràng buộc trên các dòng của bảng hoặc nhiều bảng.
- Thứ hai, dùng Trigger SQL còn giúp các chương trình có hàm chạy ngầm phục vụ trường hợp hữu hạn, không dùng cho các mục đích giao dịch hoặc kinh doanh. Điều này vô cùng quan trọng, bởi giúp ngăn chặn việc xóa Data quan trọng ngoài ý muốn.
Ưu nhược điểm của Trigger SQL
Bên cạnh những ưu điểm nổi bật, Trigger trong SQL còn có một số nhược điểm cần khắc phục. Cụ thể như thế nào, mời bạn theo dõi bảng sau:
Ưu – nhược điểm |
Chi tiết |
✔️ Ưu điểm của Trigger trong SQL |
– Viết code cho những Trigger khá đơn giản. Bởi chúng được mã hóa như những Stored Procedure. – Bên cạnh đó với Trigger bạn cũng có thể tạo được Audit cơ bản một cách dễ dàng. Bạn có thể tự mình xây dựng giải pháp chèn Data bảng đã xóa vào bảng kiểm tra dữ liệu thông qua câu lệnh xóa Trigger, hoặc sử dụng Trigger Update. – Ngoài ra người dùng có thể tùy ý call những hàm và Store Procedure lưu trữ ở Trigger – Trigger còn tiện ích hơn khi bạn muốn xác thực Data được cập nhật hoặc thêm mới hàng loạt. – Trigger rất hữu ích khi người dùng có nhu cầu vận hành tính vẹn toàn tham chiếu trên CSDL. – Đặc biệt ở Trigger còn có thể lồng được 32 lớp Trigger nữa đấy! |
✔️ Nhược điểm |
– Tuy nhiên với thao tác chèn Data vào Bulk insert, người dùng phải chọn Fire Triggers để có thể bảo đảm được tính nhất quán dữ liệu. – Như đã nói khi sử dụng DML Trigger, câu lệnh chỉ kết thúc khi hoàn tất quá trình thực thi. Nhưng việc này lại tiềm ẩn khá nhiều rủi ro. – Việc xác định những Trigger rất khó bởi Client không thể nhìn thấy nó. – Nếu dùng Trigger SQL để kiểm tra, khi có câu lệnh kích hoạt bạn cần phải thực thi ngay lập tức. Nhưng với một số trường hợp nhất định, việc này không cần thiết. – Dùng Trigger trong SQL còn tiềm ẩn nguy cơ về vấn đề bảo mật. Bởi hacker có thể thêm những cụm CLR Trigger vào CSDL để chiếm được quyền kiểm soát server. – Việc khắc phục sự cố và gỡ lỗi khi nhiều Trigger lồng vào là rất khó. Quá trình này tiêu tốn nhiều thời gian và tài nguyên. – Mặt khác hệ thống có thể sẽ chạy chậm lại khi bạn dùng Trigger. |
Kết luận
Trên đây là những thông chi tiết về Trigger. Hy vọng qua những chia sẻ của ITNavi, quý bạn đọc đã hiểu hơn về Trigger trong SQL. Đừng quên đón đọc nhiều bài viết hữu ích khác trên hệ thống bạn nhé!