Cách hoạt động của trigger Các trường hợp sử dụng trigger Tạo trigger Vô hiệu hoá trigger Kích hoạt trigger cho cột Trigger và giao tác Trigger là gì?. Trigger là một dạng
Trang 1TRẦN THỊ BẠCH HUỆ
NỘI DUNG
Trigger là gì?
Cách hoạt động của trigger
Các trường hợp sử dụng trigger
Tạo trigger
Vô hiệu hoá trigger
Kích hoạt trigger cho cột
Trigger và giao tác
Trigger là gì?
Trigger là một dạng đặc biệt của stored procedure, được thực thi tự động khi dữ liệu có sự thay đổi như thêm, sửa, hoặc xoá
Có thể sử dụng trigger vào các công việc sau:
– Thay đổi dữ liệu của các bảng liên quan khi bảng đang xét
có sự biến đổi dữ liệu – Đảm bảo ràng buộc cho một cột – Không cho phép thay đổi dữ liệu hoặc phụ hồi (roll back) lại các thao tác sửa đổi
Cách hoạt động của trigger
Trigger được thực thi tự động khi có thao tác thêm, sửa, xoá trên dữ liệu.
Trigger sử dụng được với khung nhìn.
Một trigger chỉ được định nghĩa trên 1 bảng nhưng các xử lý trong trigger có thể sử dụng nhiều bảng khác.
Có thể xử lý quay lui các thao tác đã thực hiện bằng lệnh ROLL TRANSACTION
Trang 2 Khi thực thi trigger, SQL Server sẽ tạo ra 2 bảng
INSERTED và DELETED Đây là 2 bảng tạm, chứa
trong bộ nhớ chính Các bảng này được dùng để
khôi phục lại phần dữ liệu đã thay đổi (roll back)
Hai bảng này là cục bộ cho mỗi trigger, có cấu trúc
giống bảng mà trigger định nghĩa trên đó và chỉ tồn
tại trong thời gian trigger đang xử lý
– Inserted: Chứa các dòng mới được insert hoặc update vào
bảng
– Deleted: Chứa các dòng vừa mới bị xoá khỏi bảng
Chú ý: Thao tác Update = delete dòng cũ + insert
dòng mới
Các trường hợp sử dụng trigger
Có thể sử dụng trigger trong các trường hợp
sau:
– Xử lý các ràng buộc toàn vẹn dữ liệu
– Kiểm soát dữ liệu khi có sự thay đổi giá trị trong
bảng
– Xử lý dữ liệu trên nhiều dòng
– Tạo thông báo lỗi
Tạo trigger
Cú pháp:
CREATE TRIGGER tên_trigger
ON tên_b ảng
<FOR | AFTER | INSTEAD OF>
<INSERT , UPDATE , DELETE>
AS
Lệnh_trigger
Ý nghĩa:
– FOR | AFTER: Trigger được gọi thực thi sau khi thao tác insert | update | delete đã được thực hiện thành công
Các dòng mới thêm đồng thời chứa trong bảng dữ liệu
và bảng inserted
Các dòng bị xoá chỉ nằm trong bảng deleted
Trang 3 INSTEAD OF: Trigger được gọi thực thi
trước khi thực hiện thao tác insert | update |
delete trên bảng.
– Các dòng mới thêm chỉ chứa trong bảng inserted
– Các dòng bị xoá nằm đồng thời trong bảng
deleted và bảng dữ liệu
Chú ý:
– Table1 có trigger1, table2 có trigger2, nếu thao tác trên table1 có liên quan đến table2 thì trigger2 tự động thực thi, gọi là trigger lồng (Nested Trigger)
Trang 4Ví dụ
Cho lược đồ CSDL như sau:
Sinhvien(maSV, hoSV, tenSV, ns, phai, que, maK)
Khoa(maK, tenK)
Monhoc(maM, tenM, st)
Ketqua(maSV, maM, lanthi, diem)
Không được tồn tại 2 khoa cùng tên
CREATE TRIGGER KTTenKhoa ON khoa AFTER INSERT,UPDATE
AS
BEGIN
IF update(tenK)
BEGIN
DECLARE @ten NVARCHAR(30)
SET @ten= (SELECT tenK FROM inserted)
DECLARE @count INT
SET @count = (SELECT count(*) FROM Khoa WHERE tenk=@ten)
IF (@count >1)
BEGIN
raiserror('Ten khoa nay da ton tai',16,1)
rollback tran
END
Vô hiệu hoá trigger
Trigger cần bị vô hiệu hóa trong một số trường hợp:
– Trigger gây ra lỗi trong quá trình xử lý CSDL – Quá trình nhập hay khôi phục những dữ liệu không thỏa trigger
Vô hiệu hóa trigger bằng lệnh DISABLE
TRIGGER có c ấu trúc như slide sau:
DISABLE TRIGGER tên_trigger
ON tên_ đối_tượng | DATABASE | SERVER
Ví dụ: Vô hiệu hoá trigger KTTenKhoa
DISABLE TRIGGER KTTenKhoa
ON Khoa
Trang 5 Hiệu lực hoá trigger bằng lệnh:
ENABLE TRIGGER tên_trigger
ON tên_ đối_tượng | DATABASE | SERVER
Ví dụ: Hiệu lực hoá trigger KTTenKhoa
ENABLE TRIGGER KTTenKhoa
ON Khoa
Trigger và giao tác
Khi một trigger được kích hoạt, SQL Server
luôn tạo ra một giao tác theo dõi những thay
đổi do câu lệnh kích hoạt trigger hoặc do bản
thân trigger gây ra Sự theo dõi này cho
phép CSDL quay trở lại trạng thái trước đó
bằng lệnh
ROLLBACK TRANSACT
Ví dụ:
Bài tập
Cho lược đồ CSDL như sau:
Sinhvien(maSV, hoSV, tenSV, ns, phai, que, maL) Lop(maL, tenL)
Monhoc(maM, tenM, st) Ketqua(maSV, maM, lanthi, diem)
Trang 6 Tạo các trigger để kiểm tra:
– Không được tồn tại 2 lớp có cùng tên
– Số sinh viên của một lớp không vượt quá 100
– Sinh viên chỉ có tối đa 2 lần thi
– Điểm của sinh viên không được vượt quá 10
– Giả sử thêm cột sĩ số vào trong bảng Lop, hãy
cập nhật lại sĩ số của mỗi lớp khi có sinh viên mới
đăng ký hoặc chuyển lớp
Hết