Trong thế giới cơ sở dữ liệu quan hệ, Trigger là một phần quan trọng của SQL. Trigger là một công cụ mạnh mẽ cho phép tự động hóa các hành động dựa trên sự kiện hoặc điều kiện cụ thể trong cơ sở dữ liệu. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về Trigger, cách chúng hoạt động và cách chúng được áp dụng trong SQL.
1. Trigger trong SQL là gì?
Trigger
trong SQL là một khối mã SQL được kích hoạt tự động khi một sự kiện đã được xác định xảy ra. Các sự kiện này có thể bao gồm việc chèn (INSERT), cập nhật (UPDATE), hoặc xóa (DELETE) bản ghi trong một bảng. Trigger
thường được sử dụng để thực hiện các hành động như kiểm tra tính toàn vẹn dữ liệu, ghi nhật ký (audit), hoặc thực hiện logic kinh doanh phức tạp khi một điều kiện cụ thể được đáp ứng.
2. Các Loại Trigger trong SQL
Có hai loại Trigger chính trong SQL:
Trigger Trước (BEFORE INSERT/UPDATE/DELETE): Trigger loại này được thực thi trước khi sự kiện tương ứng xảy ra. Chúng thường được sử dụng để kiểm tra hoặc biến đổi dữ liệu trước khi nó được ghi vào cơ sở dữ liệu. Ví dụ, Trigger "BEFORE INSERT" có thể kiểm tra tính duy nhất của địa chỉ email của một nhân viên trước khi cho phép chèn một bản ghi mới vào bảng nhân viên.
Dưới đây là một ví dụ về cách sử dụng Trigger trước ("BEFORE INSERT") trong SQL. Trong ví dụ này, chúng ta sẽ tạo một trigger để kiểm tra tính duy nhất của email trước khi chèn một bản ghi mới vào bảng nhân viên:
-- Tạo bảng nhân viên
CREATE TABLE nhanvien (
id INT PRIMARY KEY,
ten NVARCHAR(50),
email NVARCHAR(100)
);
-- Tạo trigger trước kiểm tra tính duy nhất của email
CREATE TRIGGER tr_nhanvien_unique_email
ON nhanvien
BEFORE INSERT
AS
BEGIN
-- Kiểm tra xem email đã tồn tại trong bảng hay chưa
IF EXISTS (SELECT 1 FROM nhanvien WHERE email = (SELECT email FROM inserted))
BEGIN
RAISEERROR ('Email đã tồn tại trong cơ sở dữ liệu.', 16, 1);
ROLLBACK;
END
END;
Trong ví dụ này:
- Chúng ta đầu tiên tạo một bảng
nhanvien
để lưu trữ thông tin về nhân viên, bao gồm một cột email để lưu địa chỉ email của mỗi nhân viên. - Sau đó, chúng ta tạo một Trigger trước ("BEFORE INSERT") có tên tr_nhanvien_unique_email trên bảng nhanvien.
- Trigger này sẽ kiểm tra xem địa chỉ email được chèn vào bảng có duy nhất không. Nó sử dụng câu lệnh IF EXISTS để kiểm tra xem email đã tồn tại trong bảng nhanvien hay chưa.
- Nếu địa chỉ email đã tồn tại, Trigger sẽ sử dụng RAISEERROR để thông báo lỗi và sau đó sử dụng ROLLBACK để hủy bỏ việc chèn bản ghi mới, đảm bảo rằng không có bản ghi trùng lặp được thêm vào bảng.
- Với Trigger này, nếu bạn cố gắng chèn một bản ghi với địa chỉ email đã tồn tại trong bảng, trigger sẽ ngăn chặn việc thêm bản ghi đó vào cơ sở dữ liệu và thông báo lỗi.
- Lưu ý rằng trigger trước có thể được sử dụng để thực hiện nhiều loại kiểm tra và biến đổi dữ liệu trước khi nó được lưu trữ trong cơ sở dữ liệu.
Trigger Sau (AFTER INSERT/UPDATE/DELETE): Trigger sau, còn gọi là "AFTER INSERT," "AFTER UPDATE," hoặc "AFTER DELETE," được thực thi sau khi sự kiện xảy ra. Chúng thường được sử dụng để ghi nhật ký các thay đổi, gửi thông báo, hoặc cập nhật các bản ghi liên quan. Ví dụ, bạn có thể sử dụng trigger "AFTER UPDATE" để ghi lại mọi thay đổi được thực hiện trên thông tin liên hệ của một khách hàng.
Dưới đây là một ví dụ về cách sử dụng trigger sau ("AFTER INSERT") trong SQL. Trong ví dụ này, chúng ta sẽ tạo một trigger để tự động ghi lại thông tin về các bản ghi được chèn vào bảng:
-- Tạo bảng thông tin đơn hàng
CREATE TABLE donhang (
id INT PRIMARY KEY,
ngaydat DATE,
ghichu NVARCHAR(255)
);
-- Tạo bảng lưu log đơn hàng
CREATE TABLE logdonhang (
log_id INT PRIMARY KEY,
donhang_id INT,
thongtin NVARCHAR(255),
thoidiem DATETIME
);
-- Tạo trigger sau để ghi log sau khi chèn đơn hàng
CREATE TRIGGER tr_donhang_log
ON donhang
AFTER INSERT
AS
BEGIN
DECLARE @donhang_id INT;
SELECT @donhang_id = id FROM inserted;
INSERT INTO logdonhang (donhang_id, thongtin, thoidiem)
VALUES (@donhang_id, 'Đơn hàng được tạo', GETDATE());
END;
Trong ví dụ này:
- Chúng ta đầu tiên tạo một bảng donhang để lưu thông tin về đơn hàng và một bảng logdonhang để lưu trữ thông tin về các thay đổi hoặc sự kiện liên quan đến đơn hàng.
- Sau đó, chúng ta tạo một Trigger sau ("AFTER INSERT") có tên tr_donhang_log trên bảng donhang.
Trigger này sẽ thực hiện sau khi một bản ghi mới được chèn vào bảng donhang
. Trong Trigger, chúng ta sử dụng biến @donhang_id để lấy giá trị của cột id từ bản ghi mới được chèn (sử dụng SELECT @donhang_id = id FROM inserted).
- Tiếp theo, chúng ta thực hiện việc chèn một bản ghi mới vào bảng
logdonhang
với thông tin về đơn hàng được tạo và thời điểm tạo bản ghi này. - Kết quả là, sau khi một đơn hàng được chèn vào bảng donhang, trigger sẽ tự động ghi lại thông tin về đơn hàng trong bảng logdonhang, cho phép theo dõi các sự kiện và thay đổi liên quan đến đơn hàng.
- Trigger sau thường được sử dụng để thực hiện các hoạt động như ghi log, gửi thông báo, cập nhật dữ liệu liên quan và thực hiện các tác vụ sau khi một sự kiện đã xảy ra.
3. Cách Trigger hoạt động
Trigger bao gồm mã SQL và liên quan đến một bảng hoặc view cụ thể. Mỗi trigger xác định sự kiện nó phản ứng (ví dụ: INSERT, UPDATE, DELETE) và các hành động cần thực hiện khi sự kiện đó xảy ra. Những hành động này có thể bao gồm một loạt câu lệnh SQL, việc gọi các thủ tục lưu trữ, hoặc thậm chí là kích hoạt các chương trình bên ngoài.
4. Khái niệm quan trọng
OLD và NEW: Đây là các bảng giả tạo đặc biệt trong Trigger. Bảng OLD biểu thị giá trị của bản ghi trước khi sự kiện xảy ra, trong khi bảng NEW biểu thị giá trị sau sự kiện. Chúng rất hữu ích trong trigger "UPDATE" để so sánh giữa giá trị cũ và giá trị mới.
Tính Toàn Vẹn Tham Chiếu: Trigger có thể được sử dụng để đảm bảo tính toàn vẹn tham chiếu, đảm bảo rằng các mối quan hệ giữa các bảng được duy trì.
5. Các ứng dụng thực tế
- Trigger có thể được sử dụng để duy trì một hệ thống kiểm toán của các thay đổi trong cơ sở dữ liệu. Điều này rất quan trọng để theo dõi các thay đổi dữ liệu và xác định người dùng thực hiện thay đổi.
- Trigger có thể thực hiện các quy tắc kiểm tra dữ liệu phức tạp, vượt ra ngoài khả năng của các ràng buộc đơn giản. Ví dụ, kiểm tra xem một đơn hàng có thể đặt hàng dựa trên số lượng tồn kho hiện tại.
- Trigger có thể tự động cập nhật hoặc xóa bản ghi liên quan trong các bảng khác khi bản ghi chính bị sửa đổi hoặc xóa bỏ.
- Trigger có thể kích hoạt thông báo qua email, tin nhắn SMS, hoặc các hình thức giao tiếp khác khi các sự kiện cơ sở dữ liệu cụ thể xảy ra.
Kết luận
Như vậy chúng ta đã cùng tìm hiểu về các khái niệm cơ bản đến cách hoạt động của Trigger trong SQL. Trigger giúp tự động hoá nhiệm vụ, giảm lỗi người dùng, bảo vệ dữ liệu, kiểm tra ràng buộc, và ghi log. Nhưng cũng phải cân nhắc khi sử dụng Trigger về hiệu suất, có thể dẫn đến sự phức tạp và khó quản lý.
Hi vọng bài viết sẽ đem đến cho bạn những thông tin hữu ích. Hãy theo dõi Stringee để cập nhật những thông tin công nghệ mới nhất mỗi ngày.
Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.
Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy, Adavigo, bTaskee…
Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: