Một trigger là một đối tượng gắn liền với một bảng và được tự động kớch hoạt khi xảy ra những giao tỏc làm thay đổi dữ liệu trong bảng. Định nghĩa một trigger bao gồm cỏc yếu tố sau:
• Trigger sẽ được ỏp dụng đối với bảng nào?
• Trigger được kớch hoạt khi cõu lệnh nào được thực thi trờn bảng: INSERT, UPDATE, DELETE?
• Trigger sẽ làm gỡ khi được kớch hoạt?
Cõu lệnh CREATE TRIGGER được sử dụng để đinh nghĩa trigger và cú cỳ phỏp như sau:
CREATE TRIGGER tờn_trigger
ON tờn_bảng
FOR {[INSERT][,][UPDATE][,][DELETE]} AS
[IF UPDATE(tờn_cột)
[AND UPDATE(tờn_cột)|OR UPDATE(tờn_cột)] ...]
cỏc_cõu_lệnh_của_trigger
Vớ dụ 5.12: Ta định nghĩa cỏc bảng như sau: Bảng MATHANG lưu trữ dữ liệu về cỏc mặt hàng:
CREATE TABLE mathang (
mahang NVARCHAR(5) PRIMARY KEY, /*mó hàng*/ tenhang NVARCHAR(50) NOT NULL, /*tờn hàng*/ soluong INT, /*số lượng hàng hiện cú*/
)
Bảng NHATKYBANHANG lưu trữ thụng tin về cỏc lần bỏn hàng
CREATE TABLE nhatkybanhang (
stt INT IDENTITY PRIMARY KEY,
ngay DATETIME, /*ngày bỏn hàng*/
nguoimua NVARCHAR(30), /*tờn người mua hàng*/ mahang NVARCHAR(5) /*mó mặt hàng được bỏn*/
FOREIGN KEY REFERENCES mathang(mahang), soluong INT, /*giỏ bỏn hàng*/
giaban MONEY /*số lượng hàng được bỏn*/ )
Cõu lệnh dưới đõy định nghĩa trigger trg_nhatkybanhang_insert. Trigger này cú chức năng tự động giảm số lượng hàng hiện cú khi một mặt hàng nào đú được bỏn (tức là khi cõu lệnh INSERT được thực thi trờn bảng NHATKYBANHANG).
CREATE TRIGGER trg_nhatkybanhang_insert ON nhatkybanhang
FOR INSERT AS
UPDATE mathang
SET mathang.soluong=mathang.soluong-inserted.soluong FROM mathang INNER JOIN inserted
ON mathang.mahang=inserted.mahang
Với trigger vừa tạo ở trờn, nếu dữ liệu trong bảng MATHANG là: thỡ sau khi ta thực hiện cõu lờnh:
INSERT INTO nhatkybanhang
(ngay,nguoimua,mahang,soluong,giaban) VALUES('5/5/2004','Tran Ngoc Thanh','H1',10,5200)
dữ liệu trong bảng MATHANG sẽ như sau:
Trong cõu lệnh CREATE TRIGGER ở vớ dụ trờn, sau mệnh đề ON là tờn của bảng mà trigger cần tạo sẽ tỏc động đến. Mệnh đề tiếp theo chỉ định cõu lệnh sẽ kớch hoạt trigger (FOR INSERT). Ngoài INSERT, ta cũn cú thể chỉ định UPDATE hoặc DELETE cho mệnh đề này, hoặc cú thể kết hợp chỳng lại với nhau. Phần thõn của trigger nằm sau từ khoỏ AS bao gồm cỏc cõu lệnh mà trigger sẽ thực thi khi được kớch hoạt.
Chuẩn SQL định nghĩa hai bảng logic INSERTED và DELETED để sử dụng trong cỏc trigger. Cấu trỳc của hai bảng này tương tự như cấu trỳc của bảng mà trigger tỏc động. Dữ liệu trong hai bảng này tuỳ thuộc vào cõu lệnh tỏc động lờn bảng làm kớch hoạt trigger; cụ thể trong cỏc trường hợp sau:
• Khi cõu lệnh DELETE được thực thi trờn bảng, cỏc dũng dữ liệu bị xoỏ sẽ được sao chộp vào trong bảng DELETED. Bảng INSERTED trong trường hợp này khụng cú dữ liệu.
• Dữ liệu trong bảng INSERTED sẽ là dũng dữ liệu được bổ sung vào bảng gõy nờn sự kớch hoạt đối với trigger bằng cõu lệnh INSERT. Bảng DELETED trong trường hợp này khụng cú dữ liệu.
• Khi cõu lệnh UPDATE được thực thi trờn bảng, cỏc dũng dữ liệu cũ chịu sự tỏc động của cõu lệnh sẽ được sao chộp vào bảng DELETED, cũn trong bảng INSERTED sẽ là cỏc dũng sau khi đó được cập nhật.