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.
*

Khi người dùng đặt đơn hàng hãy auto cập nhật số lượng tồn trong bảng kho 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 inserteddeleted ta vẫn rút ra 1 công thức cập nhật trung trong đa số trường hợp

SLTonKhoCu = 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
*

Đặt mặt hàng 5 thành phầm với mã là 1

*

Cập nhật lên 10

*

Cập nhật về 3

*

Cập nhật một số trong những thông tin khác nhưng không tương quan đến số lượng

*

Xóa 1-1 đặt hàng

*

Source code bài bác toàn

Trigger thêm

*

Trigger Xóa

*

Trigger Sửa

*

/* 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

Kết luận

Việc mà lại bạn sử dụng Trigger là không yêu cầu và chúng ta thường tưởng rằng chính vì vậy mà chả ai sử dụng nó là hoàn toàn sai . Cơ mà Trigger theo như mình khám phá qua thì vẫn có rất nhiều nơi sẽ áp dụng nó vào mục tiêu riêng của họ.