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