Trigger là gì ?
Hiểu đơn giản và dễ dàng thì Trigger là một trong stored procedure không tồn tại tham số. Trigger tiến hành một cách auto khi một trong ba câu lệnh Insert, Update, Delete làm biến đổi dữ liệu bên trên bảng bao gồm chứa trigger.
Cú pháp của Trigger
CREATE TRIGGER tên_trigger ON tên_bảngFOR DELETE, INSERT, UPDATEAS câu_lệnh_sql
Trigger dùng làm gì ?
Trigger hay được sử dụng để kiểm soát ràng buộc (check constraints) trên các quan hệ (nhiều bảng/table) hoặc trên nhiều dòng (nhiều record) của bảng.Bạn đang xem: Trigger là gì sql
Bài toán để ra.
Bạn bao gồm 2 bảng kho sản phẩm và đặt hàng liên kết cùng với nhau bởi mã hàng.
Giải pháp
Khi bạn dùng đặt hàng ta chỉ bao gồm 3 loại làm việc chính với database là : Insert, Delete, UpdateVậy chỉ cần tạo 3 trigger tương xứng là ok người dùng đặt hàng: Số lượng còn vào kho = số lượng còn - Số lượt đặtNgười dùng hủy không mua hàng nữa: Số lượng còn vào kho = con số còn + Số lượt đặtNgười sử dụng cập nhật số lượng đặt => Số lượng còn tăng giảm tùy ýVấn đề
Ở 2 trường hợp insert với delete ta tiến hành bình thường. Nhưng trong trường đúng theo update con số hàng tồn đã sảy ra trong 3 trường hòa hợp sau.Số lượng đặt ban sơ = 5 sau đó tăng lên 10 => số lượng trong kho sẽ sút 10 tương ứngSố lượng đặt bây giờ = 10 sau đó giảm xuống 3 => con số trong kho sẽ tăng 7 tương ứngTận dụng vấn đề trong sql câu lệnh update = Insert new row to lớn Delete old row cõ nghĩa là khi triển khai update csdl trong sql vẫn chạy vấn đề insert tài liệu mới trước tiếp nối sẽ xóa đi bảng cũ.Xem thêm: Acrylic Resin Là Gì - Phân Loại & Ứng Dụng Của Resin Trong Thực Tế
Giải quyết vấn đề
Tận dụng việc thực hiện Trigger luôn luôn tồn tại 2 bảng inserted và deleted ta vẫn rút ra 1 công thức cập nhật trung trong đa số trường hợpSLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang
Thực hiện nay qua ví dụ nhỏ
Ban đầu thêm tài liệu và select nó ra





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


/* cập nhật hàng vào kho sau khi đặt đơn hàng hoặc update */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/* update hàng trong kho sau khi cập nhật đặt mặt hàng */CREATE TRIGGER trg_CapNhatDatHang on tbl_DatHang after update ASBEGIN UPDATE tbl_KhoHang phối 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 mua 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