Ví dụ về trigger trong sql

      47

Trigger là gì ?

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

Trigger hay được thực hiện để kiểm soát ràng buộc (check constraints) trên những quan hệ (nhiều bảng/table) hoặc trên những dòng (nhiều record) của bảng.

Bạn đang xem: Ví dụ về trigger trong sql

Bài toán để ra.

Bạn có 2 bảng kho mặt hàng và đặt hàng liên kết với nhau vì mã hàng.

Xem thêm: Bash, Shell Là Gì - Định Nghĩa, Khái Niệm

*

Khi người dùng mua hàng hãy tự động hóa cập nhật số lượng tồn trong bảng kho hàng.

Giải pháp

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

Vấn đề

Ở 2 trường phù hợp insert với delete ta triển khai bình thường. Mà lại trong trường phù hợp update con số hàng tồn vẫn sảy ra vào 3 trường phù 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 sau đó giảm xuống 3 => con số trong kho vẫn tăng 7 tương ứngTận dụng câu hỏi trong sql câu lệnh update = Insert new row to lớn Delete old row cõ nghĩa là khi tiến hành update cơ sở dữ liệu trong sql vẫn chạy vấn đề insert dữ liệu mới trước tiếp đến sẽ xóa đi bảng cũ.

Giải quyết vấn đề

Tận dụng việc thực hiện Trigger luôn tồn trên 2 bảng inserted cùng deleted ta đang rút ra 1 công thức update trung trong phần lớn 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 sản phẩm 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 trong những thông tin khác cơ mà không liên 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 mua 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 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 vào kho sau thời điểm 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 cơ mà bạn sử dụng Trigger là không đề xuất và bọn họ thường tưởng rằng chính vì thế mà chả ai sử dụng nó là hoàn toàn sai . Nhưng mà Trigger theo như mình tò mò qua thì vẫn có không ít nơi sẽ sử dụng nó vào mục tiêu riêng của họ.