Trigger là gì ?

Hiểu đơn giản thì Trigger là 1 trong stored procedure không có tham số. Trigger triển khai một cách tự động khi một trong ba câu lệnh Insert, Update, Delete làm biến đổi dữ liệu trên bảng tất cả 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 cái gi ?

Trigger thường được áp dụng để đánh giá ràng buộc (check constraints) trên các quan hệ (nhiều bảng/table) hoặc trên các dòng (nhiều record) của bảng.

Bạn đang xem: Trigger Trong Sql Server: Hướng Dẫn Viết Trigger Trong Sql Qua Ví Dụ Cơ Bản

Bài toán đặt ra.

Bạn tất cả 2 bảng kho hàng và mua hàng liên kết với nhau vày mã hàng.

Xem thêm: Thuốc Alpha Choay Là Thuốc Gì, Công Dụng & Liều Dùng Hello Bacsi

*

Khi fan dùng đặt đơn hàng hãy tự động hóa cập nhật con số tồn trong bảng kho hàng.

Giải pháp

Khi người dùng mua hàng ta chỉ bao gồm 3 loại thao tác làm việc chính với csdl là : Insert, Delete, UpdateVậy chỉ việc tạo 3 trigger khớp ứng là ok người dùng đặt hàng: Số lượng còn trong kho = con số còn - Số lượt đặtNgười sử dụng hủy không đặt hàng nữa: Số lượng còn trong kho = con số còn + Số lượt đặtNgười cần sử dụng cập nhật con số đặt => Số lượng còn tăng giảm tùy ý

Vấn đề

Ở 2 trường thích hợp insert cùng delete ta tiến hành bình thường. Tuy nhiên trong trường hợp update số lượng hàng tồn đã sảy ra trong 3 trường hòa hợp sau.Số lượng đặt thuở đầu = 5 sau đó tăng lên 10 => con số trong kho sẽ bớt 10 tương ứngSố lượng đặt từ bây giờ = 10 kế tiếp 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 Delete old row cõ tức thị khi triển khai update database trong sql vẫn chạy vấn đề 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 luôn tồn tại 2 bảng inserted với deleted ta đã rút ra 1 công thức update trung trong phần nhiều trường hợp

SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang

Thực hiện qua lấy ví dụ nhỏ

Ban đầu thêm tài liệu và select nó ra
*

Đặt hàng 5 sản 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 vài thông tin khác mà không liên quan đến số lượng

*

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

*

Source code bài xích toàn

Trigger thêm

*

Trigger Xóa

*

Trigger Sửa

*

/* update hàng trong kho sau khi đặt đơn 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/* update hàng vào kho sau khi update đặ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/* update hàng vào 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 thực hiện Trigger là không nên và chúng ta thường tưởng rằng chính vì thế mà chả ai cần sử dụng nó là hoàn toàn sai . Tuy thế Trigger theo như mình tò mò 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ọ.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *