Chuyên đề Trigger

Là các chương trình lưu trữ bên trong CSDL. Mỗi trigger tương ứng với một bảng. Được kích hoạt khi có thao tác trên bảng. Được tạo bởi người dùng có quyền Trigger. Xuất hiện từ MySQL Server 5.0.2

pdf15 trang | Chia sẻ: lylyngoc | Lượt xem: 2065 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Chuyên đề Trigger, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Trigger Trigger là gì??  Là các chương trình lưu trữ bên trong CSDL.  Mỗi trigger tương ứng với một bảng.  Được kích hoạt khi có thao tác trên bảng.  Được tạo bởi người dùng có quyền Trigger.  Xuất hiện từ MySQL Server 5.0.2 Tại sao lại sử dụng Trigger?? Là cơ chế hữu dụng đảm bảo tính toàn vẹn dữ liệu. Được kích hoạt tự động khi có các thao tác trên dữ liệu của bảng ( thêm, sửa, xóa) Thay thế kiểm tra dữ liệu bằng tay Cú pháp CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body Hoặc CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW BEGIN ... END Cú pháp  Trong đó: trigger_name: tên trigger trigger_time: thời gian thực thi trigger − BEFORE − AFTER trigger_event: Kiểu câu lệnh kích hoạt trigger − INSERT − UPDATE − DELETE Cú pháp  Trong một Database không có 2 trigger cùng tên hoặc cùng chức năng. − Vd:  Không thể tạo 2 trigger BEFORE UPDATE hoặc AFTER UPDATE.  Begin…End để thực thi nhiều câu lệnh trong lệnh trong mệnh đề IF Các ghi chú khi tạo Triggers Không cho phép • Gọi một thủ tục bên trong trigger • Tạo trigger cho khung nhìn hay bảng tạm • Sử dụng giao dịch trong trigger • …. Quy ước đặt tên: (BEFORE | AFTER)_tableName_(INSERT| UPDATE | DELETE) Tham chiếu giá trị cột trong Triggers • Từ khóa NEW and OLD cho phép bạn truy cập các cột trong những dòng bị ảnh hưởng bởi trigger ( không phân biệt hoa thường).  Trong INSERT TRIGGER chỉ NEW.column_name được sử dụng.  Trong DELETE TRIGGER chỉ có OLD.column_name được sử dụng  Trong UPDATE TRIGGER − NEW.column_name để tham chiếu đến cột chứa giá trị mới (giá trị mới thêm vào) − OLD.column_name để tham chiếu đến cột chứa giá trị cũ ( đã tồn tại) − Trong Before Triggers, bạn có thể chỉnh sửa giá trị cột NEW bằng câu lệnh SET. Cú pháp  Tên cột với từ khóa OLD chỉ đọc không thay đổi được  Tên cột với từ khóa NEW có thể đọc và chỉnh sửa Ví dụ: Trigger Insert Delimiter || drop trigger if exists mon_hoc_insert|| create trigger mon_hoc_insert before INSERT on monhoc for each row begin if new.so_tiet <10 then begin set new.so_tiet=null; set new.ten_mon=null; end; end if; end|| Delimiter; Ví dụ: Trigger Update Delimiter || drop trigger if exists khoi_thi_update|| create trigger khoi_thi_update BEFORE UPDATE on diemthi for each row begin if (new.diem 10) then set new.diem=null; end if; end|| Delimiter; delimiter | drop trigger if exists update_so_tiet| create trigger update_so_tiet before update on mon_hoc for each row begin if new.so_tiet <=10 then set new.so_gio=new.so_tiet*10; end if; end;| delimiter; Xem thông tin các triggers của CSDL • Trên tất cả các CSDL SELECT * FROM Information_Schema.Triggers • Trên CSDL chỉ định SELECT * FROM Information_Schema.Triggers WHERE Trigger_schema = 'database_name'; • Trên một bảng CSDL SELECT * FROM Information_Schema.Triggers WHERE Trigger_schema = 'database_name' AND Event_object_table = 'table_name'; Xoá một triggers DROP TRIGGER table_name.trigger_name Lưu ý: MySQL không cung cấp câu lệnh để chỉnh sửa trigger. Để chỉnh sửa trigger, đầu tiên bạn phải xoá trigger sau đó tạo lại. Cảm ơn