Sử dụng các Trigger đệ quy (Recursive Triggers)

Một phần của tài liệu Bài giảng hệ quản trị cơ sở dữ liệu (Trang 76 - 78)

D. Msdb Database

9.4.Sử dụng các Trigger đệ quy (Recursive Triggers)

Chƣơng 9 Tạo và quản lý các Trigger

9.4.Sử dụng các Trigger đệ quy (Recursive Triggers)

Trong các ví dụ trước, các trigger chỉ thực sự hoạt động đúng mục đích khi các câu lệnh kích hoạt trigger chỉ có tác dụng đối với đúng một dòng dữ liêu. Ta có thể nhận thấy là câu lệnh UPDATE và DELETE thường có tác dụng trên nhiều dòng, câu lệnh INSERT mặc dù ít rơi vào trường hợp này nhưng không phải là không gặp; đó là khi ta sử dụng câu lệnh có dạng INSERT INTO ... SELECT ... Vậy làm thế nào để trigger hoạt động đúng trong trường hợp những câu lệnh có tác động lên nhiều dòng dữ liệu?

Có hai giải pháp có thể sử dụng đối với vấn đề này: • Sử dụng truy vấn con.

• Sử dụng biến con trỏ.

Ta hình dung vấn đề này và cách khắc phục qua ví dụ dưới đây:

Ví dụ: Ta xét lại trường hợp của hai bảng MATHANG và NHATKYBANHANG như sơ đồ dưới đây:

77

Trigger dưới đây cập nhật lại số lượng hàng của bảng MATHANG khi câu lệnh UPDATE được sử dụng để cập nhật cột SOLUONG của bảng NHATKYBANHANG.

CREATE TRIGGER trg_nhatkybanhang_update_soluong ON nhatkybanhang

FOR UPDATE AS

IF UPDATE(soluong) UPDATE mathang

SET mathang.soluong = mathang.soluong – (inserted.soluong-deleted.soluong)

FROM (deleted INNER JOIN inserted ON

deleted.stt = inserted.stt) INNER JOIN mathang ON mathang.mahang = deleted.mahang

Với trigger được định nghĩa như trên, nếu thực hiện câu lệnh: UPDATE nhatkybanhang

SET soluong = soluong + 10 WHERE stt = 1

thì dữ liệu trong hai bảng MATHANG và NHATKYBANHANG sẽ là:

Bài tập

Câu 1: Trình bày khái niệm về Trigger? So sánh sự khác biệt giữa Trigger và ràng buộc (constraint)

Câu 2: Trình bày cú pháp đầy đủ của các lệnh tạo, sửa, xóa Trigger và giải thích ý nghĩa của các tham số.

78

Một phần của tài liệu Bài giảng hệ quản trị cơ sở dữ liệu (Trang 76 - 78)