Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 44 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
44
Dung lượng
195 KB
Nội dung
Bài 13 Bài 13 TRIGGERS TRIGGERS I. I. GIỚI THIỆU GIỚI THIỆU 1. 1. TRIGGER TRIGGER : : Trigger là một loại stored procedure đặc biệt được Trigger là một loại stored procedure đặc biệt được thực thi một cách tự động khi có câu lệnh UPDATE, thực thi một cách tự động khi có câu lệnh UPDATE, INSERT, DELETE tác động vào table INSERT, DELETE tác động vào table Trigger là một công cụ mạnh, khi dữ liệu bị sửa đổi, Trigger là một công cụ mạnh, khi dữ liệu bị sửa đổi, nó sẽ tự động thực hiện việc ép buộc các giao dịch sửa nó sẽ tự động thực hiện việc ép buộc các giao dịch sửa đổi này thực hiện theo quy tắc đã định nhằm đảm bảo đổi này thực hiện theo quy tắc đã định nhằm đảm bảo tính toàn vẹn dữ liệu tính toàn vẹn dữ liệu Các trigger thực thi sau khi các câu lệnh bên trong nó Các trigger thực thi sau khi các câu lệnh bên trong nó hoàn tất, nếu có lổi thì trigger sẽ không thực thi hoàn tất, nếu có lổi thì trigger sẽ không thực thi Trigger tự động thực thi, không gọi trigger thi hành Trigger tự động thực thi, không gọi trigger thi hành một cách trực tiếp một cách trực tiếp I. I. GIỚI THIỆU GIỚI THIỆU 2. 2. LOẠI TRIGGERS LOẠI TRIGGERS : Có 2 loại : Có 2 loại : : • AFTER triggers ho AFTER triggers ho ặc for trigger ặc for trigger : th : th ực thi sau khi ực thi sau khi thực hiện insert/ delete các dòng trong table, gọi là thực hiện insert/ delete các dòng trong table, gọi là reactive, chỉ tạo trên table. Khi tạo trigger nếu reactive, chỉ tạo trên table. Khi tạo trigger nếu không chỉ định rõ thì mặc định là AFTER Trigger, không chỉ định rõ thì mặc định là AFTER Trigger, • INSTEAD OF triggers INSTEAD OF triggers : ki : ki ểm tra trứơc khi thực ểm tra trứơc khi thực hiện Insert/Delete, gọi là proactive, tạo trên table và hiện Insert/Delete, gọi là proactive, tạo trên table và view view Table1 có trigger1, table2 có trigger2, nếu thao tác Table1 có trigger1, table2 có trigger2, nếu thao tác trên table1 có liên quan đến table2 thì trigger2 tự trên table1 có liên quan đến table2 thì trigger2 tự động thực thi, gọi là trigger lồng (Nested Trigger) động thực thi, gọi là trigger lồng (Nested Trigger) I. I. GIỚI THIỆU GIỚI THIỆU For/After For/After Instead of Instead of - Chỉ áp dụng cho table - Chỉ áp dụng cho table - áp dụng cho table, view - áp dụng cho table, view - Có thể định nghĩa nhiều - Có thể định nghĩa nhiều trigger trên một hành động trigger trên một hành động I/U/ D I/U/ D - Chỉ định nghĩa một Trigger - Chỉ định nghĩa một Trigger trên một hành động I/U/D trên một hành động I/U/D Thực thi sau khi : Thực thi sau khi : + xử lý ràng buộc + xử lý ràng buộc + thực hiện xong hành + thực hiện xong hành động I/U/D phát sinh trigger động I/U/D phát sinh trigger - Thi hành trước khi: - Thi hành trước khi: + Xử lý ràng buộc + Xử lý ràng buộc + Thay thế hành động + Thay thế hành động phát sinh trigger phát sinh trigger - Không xây dựng được trên - Không xây dựng được trên table có áp dụng cascade table có áp dụng cascade delete/ update delete/ update I. I. GIỚI THIỆU GIỚI THIỆU 3. 3. SỬ DỤNG TRIGGERS SỬ DỤNG TRIGGERS : : • Ràng buộc toàn vẹn dữ liệu 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 Kiểm soát dữ liệu khi có sự thay đổi giá trị trong bảng bảng • Xử lý dữ liệu trên nhiều dòng Xử lý dữ liệu trên nhiều dòng • Tạo thông báo lổi Tạo thông báo lổi • Phát sinh giá trị tính toán Phát sinh giá trị tính toán 3. 3. ĐẶC ĐIỂM và HẠN CHẾ ĐẶC ĐIỂM và HẠN CHẾ : : • Không ngăn ngừa thay đổi cấu trúc mà nó chỉ kiểm Không ngăn ngừa thay đổi cấu trúc mà nó chỉ kiểm tra sự thay đổi hay xoá dữ liệu trong các table có tra sự thay đổi hay xoá dữ liệu trong các table có quan hệ với nhau quan hệ với nhau I. I. GIỚI THIỆU GIỚI THIỆU • Kiểm tra constraint trước, sau đó đến trigger Kiểm tra constraint trước, sau đó đến trigger • Không dùng quá nhiều trigger trong một bảng Không dùng quá nhiều trigger trong một bảng • Không tạo trigger trên đối tượng Temporary Không tạo trigger trên đối tượng Temporary • Có thể xử lý dữ liệu trên nhiều dòng Có thể xử lý dữ liệu trên nhiều dòng • Trong trigger không có các lệnh:create, drop, alter Trong trigger không có các lệnh:create, drop, alter table, alter database, truncate table, select into table, alter database, truncate table, select into II. II. TẠO TRIGGER TẠO TRIGGER 1. 1. T T ẠO TRIGGER ẠO TRIGGER Sử dụng công cụ Interprise Manager Sử dụng công cụ Interprise Manager − Click phải trên tên của Table Click phải trên tên của Table − Chọn All Tasks Chọn All Tasks Manage Trigger Manage Trigger Tạo bằng lệnh T-SQL Tạo bằng lệnh T-SQL : : − Cú pháp Cú pháp : : CREATE TRIGGER CREATE TRIGGER trigger_name trigger_name ON ON table|View table|View [WITH ENCRYPTION] [WITH ENCRYPTION] { FOR | AFTER| INSTEAD OF } { FOR | AFTER| INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE] } { [INSERT] [,] [UPDATE] [,] [DELETE] } [WITH APPEND] [NOT FOR REPLICATION] [WITH APPEND] [NOT FOR REPLICATION] AS AS sql_statement sql_statement [ . . . [ . . . n n ] ] II. II. TẠO TRIGGER TẠO TRIGGER Thông tin về trigger được lưu trong table sysObjects Thông tin về trigger được lưu trong table sysObjects và syscommands và syscommands sp_helptext Trigger_Name sp_helptext Trigger_Name sp_helptrigger Table_Name sp_helptrigger Table_Name sp_depends Table_Name sp_depends Table_Name V V í dụ 1: í dụ 1: Create trigger trAddAuthor Create trigger trAddAuthor On Authors For Insert, update On Authors For Insert, update As As raiserror(“%d row have been raiserror(“%d row have been modified”,0,1,@@rowcount) modified”,0,1,@@rowcount) Return Return II. II. TẠO TRIGGER TẠO TRIGGER Trigger trAddAuthor sẽ khởi động khi người sử dụng Trigger trAddAuthor sẽ khởi động khi người sử dụng cập nhật hoặc chèn dữ liệu vào bảng Author cập nhật hoặc chèn dữ liệu vào bảng Author Ví dụ: Ví dụ: Insert authors (‘555-66-7777’,’Frog’,’Kermit’,’8000-444- Insert authors (‘555-66-7777’,’Frog’,’Kermit’,’8000-444- 5656’,’123 Sesame Street’,’West EastBrooke’, ’CA’, 5656’,’123 Sesame Street’,’West EastBrooke’, ’CA’, ’90221’, 0) ’90221’, 0) II. II. TẠO TRIGGER TẠO TRIGGER VD2 VD2 : Create table SANPHAM : Create table SANPHAM (masp int not null, tensp nvarchar(30) not null, (masp int not null, tensp nvarchar(30) not null, mancc nvarchar(5), dvtinh nvarchar(10), soluong int, mancc nvarchar(5), dvtinh nvarchar(10), soluong int, dongia int ) dongia int ) CREATE TRIGGER chenSP CREATE TRIGGER chenSP ON SANPHAM FOR INSERT ON SANPHAM FOR INSERT AS AS RAISERROR('"CO %d DONG DA DUOC CHEN VAO RAISERROR('"CO %d DONG DA DUOC CHEN VAO BANG"',0,1,@@ROWCOUNT) BANG"',0,1,@@ROWCOUNT) RETURN RETURN INSERT INTO sp VALUES (1,'man hinh','101','CAI',20,150) INSERT INTO sp VALUES (1,'man hinh','101','CAI',20,150) [...]... III AFTER TRIGGERS Ví dụ: CREaTE TRIGGER NoUppdate ON Product FOR Update IF Update(ProductID) BEGIN PRINT ‘You cannot update Productid’ RollBack Transaction END III AFTER TRIGGERS VD: CREATE TRIGGER NoupdareOrders ON Orders FOR Update AS IF (Select OrderDate from Inserted) > Getdate() BEGIN Print ‘Ngay lap hoa don phai nho hon hoac bang ngay hien hanh’ RollBack Transaction END IV INSTEAD OF TRIGGERS. .. INSTEAD OF TRIGGERS Khi thực thi câu lệnh Update Nếu record không vi phạm các ràng buộc, thì record cũ được inserted vào bảng Deleted, record mới được insert vào bảng Inserted Trigger kích hoạt và thực thi các hành động cần thiết Lưu ý: INSTEAD OF UPDATE trigger không được định nghĩa trên table có tuỳ chọn ON UPDATE CASCADE trong ràng buộc FOREIGN KEY IV INSTEAD OF TRIGGERS Đối với view: INSTEAD OF triggers. .. DELETED (mẫu tin cũ) III AFTER TRIGGERS a) Insert Trigger: Ví dụ 1: CREATE TRIGGER Trg_NgayLap_NgayGiaoHD ON Hoadon AFTER INSERT AS DECLARE @NgayLapHD DateTime, @NgayGiao DateTime SELECT @NgayLapHD=hd.NGayLapHD, @NgayGiao=hd.NgayGiaoNhan FROM HoaDon hd INNER JOIN Inserted i ON hd.MaHD=i.Mahd If @NgayGiao . Bài 13 Bài 13 TRIGGERS TRIGGERS I. I. GIỚI THIỆU GIỚI THIỆU 1. 1. TRIGGER TRIGGER : : Trigger là một. cách trực tiếp I. I. GIỚI THIỆU GIỚI THIỆU 2. 2. LOẠI TRIGGERS LOẠI TRIGGERS : Có 2 loại : Có 2 loại : : • AFTER triggers ho AFTER triggers ho ặc for trigger ặc for trigger : th : th ực. là AFTER Trigger, không chỉ định rõ thì mặc định là AFTER Trigger, • INSTEAD OF triggers INSTEAD OF triggers : ki : ki ểm tra trứơc khi thực ểm tra trứơc khi thực hiện Insert/Delete, gọi