Bạn có thể muốn hành động để kích hoạt thực hiện một lần sau khi máy khách thực hiện một câu lệnh sửa đổi một triệu hàng (trình kích hoạt mức tuyên bố). Hoặc, bạn có thể muốn kích hoạt hành động một lần cho mỗi hàng được sửa đổi (kích hoạt cấp hàng).
VÍ DỤ: Giả sử bạn có trình kích hoạt để đảm bảo tất cả học sinh trung học đều tốt nghiệp. Đó là, khi một cấp lớp cao cấp là 12, và chúng tôi tăng nó lên 13, chúng tôi muốn thiết lập các lớp để NULL
.
Đối với trình kích hoạt cấp câu lệnh, bạn muốn nói, sau khi câu lệnh tăng cấp chạy, hãy kiểm tra toàn bộ bảng một lần để cập nhật bất kỳ nows nào có lớp 13 đến NULL
.
Đối với một row-level kích hoạt, bạn muốn nói, sau mỗi hàng đó được cập nhật, cập nhật lớp hàng mới để NULL
nếu nó là 13.
Một cò tuyên bố cấp sẽ trông như thế này:
create trigger stmt_level_trigger
after update on Highschooler
begin
update Highschooler
set grade = NULL
where grade = 13;
end;
và một row-level kích hoạt sẽ trông như thế này:
create trigger row_level_trigger
after update on Highschooler
for each row
when New.grade = 13
begin
update Highschooler
set grade = NULL
where New.ID = Highschooler.ID;
end;
Lưu ý rằng SQLite không hỗ trợ trigger tuyên bố cấp, vì vậy trong SQLite, các FOR EACH ROW
là tùy chọn.
Nguồn
2012-08-07 22:57:33
Vì vậy, trình kích hoạt cấp câu lệnh có thể sửa đổi một hàng, trong khi mức hàng sẽ có thể sửa đổi mỗi hàng trong bảng? –
Không, trình kích hoạt cấp hàng có thể được sử dụng để cập nhật/xóa/chèn nhiều hàng. Hoặc các hàng trong các bảng khác. –
Và trình kích hoạt cấp tuyên bố cũng vậy. –