Hiểu đơn giản thì Trigger là một stored procedure không có tham số. Trigger thực thi một cách tự động khi một trong ba câu lệnh Insert, Update, Delete làm thay đổi dữ liệu trên bảng có chứa trigger. Show
Cú pháp của Trigger
Trigger dùng làm gì ?
Bài toán đặt ra.
Giải pháp
Vấn đề
Giải quyết vấn đề
Thực hiện qua ví dụ nhỏ
Source code bài toànKết luậnViệc mà bạn sử dụng Trigger là không bắt buộc và chúng ta thường tưởng rằng vì thế mà chả ai dùng nó là hoàn toàn sai . Nhưng Trigger theo như mình tìm hiểu qua thì vẫn có rất nhiều nơi sẽ sử dụng nó vào mục đích riêng của họ. Khi học và làm SQL bạn sẽ biết tới rất nhiều hàm, cú pháp câu lệnh truy vấn. Chắc hẳn bạn đã từng nghe qua về Store procedure và Trigger. Vậy SQL Trigger là gì và có ý nghĩa như thế nào? Đây là câu hỏi rất nhiều người mới tiếp xúc với cấu trúc dữ liệu đặt ra. Trong bài viết ngày hôm nay, hãy cùng chúng tôi tìm hiểu sâu hơn về Trigger, khi nào nên dùng chúng và những ví dụ cụ thể dễ hình dung nhất. SQL Trigger là gì?Nếu bạn đã từng biết qua Store procedure thì chắc chắn sẽ nghe tới SQL Trigger. Có thể nói, Trigger là một trường hợp đặc biệt của Store procedure vì nó không có tham số. Trong đó thường sử dụng cho 3 sự kiện là Insert, Update và Delete. Tuy nhiên nếu Store chỉ có thể chạy khi người dùng gọi thì Trigger thực thi hoàn toàn tự động. Điều này có nghĩa khi bạn thực hiện một số sự kiện làm thay đổi dữ liệu trong SQL phù hợp với điều kiện thì nó sẽ kích hoạt. Trong các tình huống ví dụ như:
Để các Trigger được kích hoạt thì việc xảy ra với cơ sở dữ liệu cần đáp ứng đúng thứ tự thao tác hoặc điều kiện. Nó sẽ diễn ra một cách tự động mà bạn không cần phải làm bất cứ điều gì khác. Các kiểu Trigger trong SQLTrong SQL, bạn sẽ gặp phải 3 loại Trigger như sau:
Trong đó, SQL Trigger cho DML được sử dụng nhiều nhất và có ứng dụng cao nhất. Vậy nên trong bài viết này chúng tôi đề cập chủ yếu tới cách sử dụng với DML. Cách sử dụng SQL TriggerCú pháp của Trigger trong SQL như sau: CREATE TRIGGER
ON
{FOR | AFTER | INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [UPDATE]}
AS
Vì Trigger được chạy tự động nên bạn có thể ứng dụng như sau:
Nhìn chung nếu bạn biết về SQL Trigger sẽ rất dễ dàng thao tác và ứng dụng nó. Ví dụ về Trigger trong SQLCũng về bài toán mượn sách trong thư viện ta có 2 bảng dữ liệu như sau: Bảng Kho_Sach: Kho_SachIDSachMaSachTenSachSoLuongBảng Muon_Sach: Muon_SachIDMuonMaSachSLMuonDistrictVấn đề đặt ra khi hành động mượn sách sẽ có những trường hợp sau:
Chúng ta sẽ giải quyết vấn đề này bằng 3 Trigger như sau: Ví dụ Trigger INSERTSQL Trigger sau đây sẽ cập nhật số lượng hàng tồn sau khi học sinh tiến hành mượn sách: CREATE TRIGGER t_MuonSach ON Muon_Sach AFTER INSERT
AS BEGIN
UPDATE Kho_Sach
SET SoLuong = SoLuong - (SELECT SLMuon FROM inserted WHERE MaSach = Kho_Sach.MaSach)
FROM Kho_Sach JOIN inserted ON Kho_Sach.MaSach = inserted.MaSach
END Ví dụ Trigger DELETETrigger dưới đây sẽ sử dụng cho trường hợp người mượn hủy không muốn mượn nữa. Câu lệnh thực hiện sẽ như sau: CREATE TRIGGER t_HuyMuonSach ON Muon_Sach FOR DELETE
AS BEGIN
UPDATE Kho_Sach
SET SoLuong = SoLuong + (SELECT SLMuon FROM deleted WHERE MaSach = Kho_Sach.MaSach)
FROM Kho_Sach JOIN deleted ON Kho_Sach.MaSach = deleted.MaSach
END Trigger dưới đây sẽ kích hoạt khi bạn đã mượn sách thành công. Kho_Sach lúc này sẽ được cập nhật lại. Cú pháp sẽ như sau: CREATE TRIGGER t_CapNhatMuonSach ON Muon_Sach AFTER UPDATE
AS BEGIN
UPDATE Kho_Sach
SET SoLuong = SoLuong -
(SELECT SLMuon FROM inserted WHERE MaSach = Kho_Sach.MaSach) +
(SELECT SLMuon FROM deleted WHERE MaSach = Kho_Sach.MaSach)
FROM Kho_Sach JOIN deleted ON Kho_Sach.MaSach = deleted.MaSach
END Khi nào thì nên sử dụng Trigger?Nếu Trigger tiện lợi như vậy thì liệu cơ sở dữ liệu nào cũng nên dùng hay không? Do có bảng Inserted và Deleted nên ứng dụng của nó chính là chống việc xóa các dữ liệu quan trọng. Tuy nhiên so với các thủ tục lưu trữ và câu lệnh khác Trigger tất nhiên cũng có sự hạn chế. Thông thường mọi người chỉ dùng cho các hành động Update, Insert và Delete. Ngoài ra, do khả năng chạy ngầm nên nhiều Trigger khiến hệ thống chậm lại. Và nó cũng không thể thay thế hoàn toàn các tác vụ khác trên cơ sở dữ liệu. Tuy nhiên người dùng có thể dùng Trigger như một cách để kiểm tra sự ràng buộc của dữ liệu. Tổng kếtTrên đây là các thông tin về SQL Trigger mà chúng tôi muốn gửi tới bạn. Sử dụng trình kích hoạt này mang đến những điểm tiện lợi cho nhiều hệ thống. Tuy nhiên tùy theo mục đích mà viết Trigger phù hợp với các tác vụ gây thay đổi trên cơ sở dữ liệu. Nếu còn gặp bất cứ vướng mắc gì về Trigger trong SQL, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất. P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công. |