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
15 trang |
Chia sẻ: lylyngoc | Lượt xem: 2079 | Lượt tải: 1
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