Trigger trong sql
Trigger là gì ?
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.
Bạn đang xem: Trigger trong sql
Cú pháp của Trigger
CREATE TRIGGER tên_trigger ON tên_bảngFOR {DELETE, INSERT, UPDATE}AS câu_lệnh_sql
Trigger dùng làm gì ?
Trigger thường được sử dụng để kiểm tra ràng buộc (check constraints) trên nhiều quan hệ (nhiều bảng/table) hoặc trên nhiều dòng (nhiều record) của bảng.Bài toán đặt ra.
Bạn có 2 bảng kho hàng và đặt hàng liên kết với nhau bởi mã hàng.Xem thêm: Tỷ Lệ An Toàn Vốn Tối Thiểu Là Gì, Hệ Số Car Là Gì, Tỷ Lệ An Toàn Vốn Tối Thiểu Là Gì

Giải pháp
Khi người dùng đặt hàng ta chỉ có 3 loại thao tác chính với CSDL là :Insert, Delete, UpdateVậy chỉ cần tạo3 triggertương ứng là okNgười dùngđặt hàng:Số lượng còn trong kho = Số lượng còn - Số lượt đặtNgười dùnghủykhông đặt hàng nữa:Số lượng còn trong kho = Số lượng còn + Số lượt đặtNgười dùngcập nhậtSố lượng đặt =>Số lượng còn tăng giảm tùy ýVấn đề
Ở 2 trường hợpinsertvàdeleteta thực hiện bình thường. Nhưng trong trường hợpupdateSố lượng hàng tồn sẽ sảy ra trong 3 trường hợp sau.Số lượng đặt ban đầu = 5 sau đó tăng lên 10 => số lượng trong kho sẽ giảm 10 tương ứngSố lượng đặt lúc này = 10 sau đó giảm xuống 3 => số lượng trong kho sẽ tăng 7 tương ứngTận dụng việc trong sql câu lệnhupdate = Insert new row To Delete old rowcõ nghĩa là khi thực hiện update CSDL trong sql sẽ chạy việc insert dữ liệu mới trước sau đó sẽ xóa đi bảng cũ.Giải quyết vấn đề
Tận dụng việc sử dụng Trigger luôn tồn tại 2 bảnginsertedvàdeletedta sẽ rút ra 1 công thức cập nhật trung trong mọi trường hợpSLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang
Thực hiện qua ví dụ nhỏ
Ban đầu thêm dữ liệu và select nó ra





Source code bài toàn
Trigger thêm


/* cập nhật hàng trong kho sau khi đặt hàng hoặc cập nhật */CREATE TRIGGER trg_DatHang ON tbl_DatHang AFTER INSERT AS BEGINUPDATE tbl_KhoHangSET SoLuongTon = SoLuongTon - (SELECT SoLuongDatFROM insertedWHERE MaHang = tbl_KhoHang.MaHang)FROM tbl_KhoHangJOIN inserted ON tbl_KhoHang.MaHang = inserted.MaHangENDGO/* cập nhật hàng trong kho sau khi cập nhật đặt hàng */CREATE TRIGGER trg_CapNhatDatHang on tbl_DatHang after update ASBEGIN UPDATE tbl_KhoHang SET SoLuongTon = SoLuongTon - (SELECT SoLuongDat FROM inserted WHERE MaHang = tbl_KhoHang.MaHang) + (SELECT SoLuongDat FROM deleted WHERE MaHang = tbl_KhoHang.MaHang) FROM tbl_KhoHang JOIN deleted ON tbl_KhoHang.MaHang = deleted.MaHangendGO/* cập nhật hàng trong kho sau khi hủy đặt hàng */create TRIGGER trg_HuyDatHang ON tbl_DatHang FOR DELETE AS BEGINUPDATE tbl_KhoHangSET SoLuongTon = SoLuongTon + (SELECT SoLuongDat FROM deleted WHERE MaHang = tbl_KhoHang.MaHang)FROM tbl_KhoHang JOIN deleted ON tbl_KhoHang.MaHang = deleted.MaHangEND
Kết luận
Việ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ọ.Xem thêm: Cách Chuyển Tiền Qua Ngân Hàng Vietcombank, Những Cách Chuyển Tiền Vào Tài Khoản Vietcombank
Cảm ơn vì các bạn đã đọc.
Via Số lượng còn tăng giảm tùy ý Vấn đề Ở 2 trường hợp insert và delete ta thực hiện bình thường. Nhưng trong trường hợp update Số lượng hàng tồn sẽ sảy ra trong 3 trường hợp sau. Số lượng đặt ban đầu = 5 sau đó tăng lên 10 => số lượng trong kho sẽ giảm 10 tương ứng Số lượng đặt lúc này = 10 sau đó giảm xuống 3 => số lượng trong kho sẽ tăng 7 tương ứng Tận dụng việc trong sql câu lệnh update = Insert new row To Delete old row cõ nghĩa là khi thực hiện update CSDL trong sql sẽ chạy việc insert dữ liệu mới trước sau đó sẽ xóa đi bảng cũ. Giải quyết vấn đề Tận dụng việc sử dụng Trigger luôn tồn tại 2 bảng inserted và deleted ta sẽ rút ra 1 công thức cập nhật trung trong mọi trường hợp SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang Thực hiện qua ví dụ nhỏ Ban đầu thêm dữ liệu và select nó ra