Ý nghĩa: Bảo đảm toàn vẹn dữ liệu theo quy tắc xác định, được quản lý theo bảng dữ liệu hoặc khung nhìn. Sử dụng DML trigger một cách hợp lý trong CSDL sẽ có tác động rất lớn trong việc tăng hiệu năng của CSDL.
Trang 2 Dùng để kiểm soát sự dữ liệu thay đổi.
trigger loại này phải được gắn liền với một bảng nào đó
trong CSDL
Khi dữ liệu trong bảng bị thay đổi (INSERT, UPDATE hay
DELETE) thì trigger sẽ được tự đông kích hoạt
DML Trigger được sử dụng trong việc bảo đảm toàn vẹn
dữ liệu theo quy tắc xác định, được quản lý theo bảng
dữ liệu hoặc khung nhìn Sử dụng DML trigger một cách hợp lý trong CSDL sẽ có tác động rất lớn trong việc tăng hiệu năng của CSDL
Trang 37.1 DML Trigger
7.1.1 Giới thiệu DML Trigger
• Ý nghĩa:
- Bảo đảm toàn vẹn dữ liệu theo quy
tắc xác định, được quản lý theo bảng dữ liệu hoặc khung nhìn.
- Sử dụng DML trigger một cách hợp
lý trong CSDL sẽ có tác động rất lớn trong việc tăng hiệu năng của CSDL.
Trang 4SQL Server 2005
7.1.1 Giới thiệu DML Trigger
Thực sự hữu dụng với những khả năng:
• Nhận biết, ngăn chặn và huỷ bỏ được những
thao tác làm thay đổi trái phép dữ liệu trong CSDL.
• Các thao tác trên dữ liệu có thể được
trigger phát hiện ra và tự động thực hiện một loạt các thao tác khác trên CSDL nhằm đảm bảo tính hợp lệ của dữ liệu.
• Thông qua DML trigger, bạn có thể tạo và
kiểm tra được những mối quan hệ phức tạp hơn giữa các bảng trong CSDL mà bản thân các ràng buộc không thể thực hiện được.
Trang 57.1.2 Tạo DML Trigger
Tạo Trigger theo cấu trúc 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
Trang 6SQL Server 2005
7.1.2.1 Tạo Trigger cho hành động
thêm bản ghi
•SQL Server đị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 tùy 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:
Trang 77.1.2.1 Tạo Trigger cho hành động
thêm bản ghi
•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 chèn 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
Trang 97.1.2.1 Tạo Trigger cho hành động thêm
DECLARE @hedaotao nvarchar(25)
DECLARE @malop nvarchar(10)
SELECT @hedaotao=hedaotao, @malop= malop FROM INSERTED
IF @hedaotao='' or @hedaotao is null
UPDATE LOP
SET hedaotao='Chính quy'
Where malop=@malop
END
Trang 11DECLARE @diemlan1 numeric(5,2)
DECLARE @masv nvarchar(10)
DECLARE @mahocphan nvarchar(10)
SELECT @masv=masv, @mahocphan=mahocphan,
@diemlan1=diem
FROM INSERTED WHERE lanthi=1
IF @diemlan1>=5
DELETE FROM DIEMTHI
WHERE masv=@masv and mahocphan=@mahocphan and lanthi=2
END
Trang 12SQL Server 2005
7.1.2.3 Tạo Trigger cho hành động xóa
bản ghi
Ví dụ: Tạo Trigger thực hiện lưu
các mẫu tin bị xóa từ bảng DIEMTHI
Trang 137.1.2.4 Sử dụng mệnh đề IF
UPDATE
Sử dụng mệnh đề IF UPDATE trong trigger nếu muốn trigger được kích hoạt khi việc thay đổi dữ liệu chỉ liên quan đến một số cột nhất định nào đó của bảng.
•IF UPDATE không sử dụng được đối với câu lệnh
DELETE.
Trang 14deleted.stt = inserted.stt) INNER JOIN
mathang
ON mathang.mahang = deleted.mahang
Trang 157.1.2.5 Lệnh ROLLBACK
TRANSACTION
Một trigger có khả năng nhận
biết được sự thay đổi về mặt dữ
liệu trên bảng dữ liệu, từ đó có
thể phát hiện và huỷ bỏ những thao tác không đảm bảo tính toàn vẹn dữ liệu.
•Trong một trigger, để huỷ bỏ
tác dụng của câu lệnh làm kích hoạt trigger, bạn sử dụng câu lệnh:
•ROLLBACK TRANSACTION
Trang 177.2 DDL Trigger
7.2.1 Giới thiệu DDL Trigger
•DDL (Data Definition Language) Trigger được kích
hoạt khi người sử dụng làm thay đổi cấu trúc CSDL hay đối tượng CSDL bằng các phát biểu SQL thuộc DDL như: Create, Alter, Drop, Grant, Deny, Revoke,…
•Nếu DML Trigger dùng để kiểm soát dữ liệu chứa
trong Table hay View thì DDL Trigger có thể được sử dụng cho chức năng quản trị CSDL Đây là loại
Trigger mới xuất hiện trong SQL Server 2005
Trang 18SQL Server 2005
7.2 DDL Trigger
7.2.1 Giới thiệu DDL Trigger
•Sau khi giai đoạn thiết kế CSDL hoàn tất, để
kiểm soát mọi sự thay đổi cấu trúc của CSDL, chúng
ta cần sử dụng loại Trigger này.
•Như vậy, mục đích của DDL Trigger là ngăn ngừa sự
thay đổi cấu trúc CSDL Ngoài ra, bạn có thể ghi lại những hành động làm thay đổi cấu trúc CSDL khi sử
dụng DDL Trigger.
Trang 197.2 DDL Trigger
7.2.1 Giới thiệu DDL Trigger
•Mục đích của DDL Trigger là kiểm soát mọi sự thay
đổi cấu trúc của CSDL.
•Có thể ghi lại những hành động làm thay đổi cấu
trúc CSDL.
Trang 20SQL Server 2005
7.2 DDL Trigger
7.2.2 Tạo DDL Trigger
Tạo DDL Trigger theo cấu trúc sau:
CREATE TRIGGER tên_trigger
ON DATABASE|ALL SERVER
FOR {[ Các sự kiện DDL] [nhóm các sự kiện]}
AS
các_câu_lệnh_của_trigger
Trang 22SQL Server 2005
7.2 DDL Trigger
•Thông tin về những sự kiện làm kích hoạt
DDL trigger được lưu lại trong trong hàm
Eventdata Hàm này trả về một giá trị kiểu
xml Lược đồ xml này bao gồm các thông tin
sau:
•Thời gian của sự kiện.
•Định danh xử lý hệ thống (The System
Process ID: SPID) của kết nối trong lúc
trigger thực hiện được thực hiện.
•Kiểu sự kiện đã kích hoạt trigger
•Tùy thuộc vào kiểu sự kiện, lược đồ bao gồm
thêm những thông tin như: database nơi sự kiện xuất hiện, đối tượng bị tác động khi sự kiện xuất hiện và câu lệnh T-SQL của sự kiện