Hướng dẫn cách sử dụng trigger trong sql

      44

Trigger là gì ?

Hiểu đơn giản dễ dàng thì Trigger là một stored procedure không tồn tại tham số. Trigger thực hiện 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 bên trên bảng tất cả chứa trigger.

Bạn đang xem: Hướng dẫn cách sử dụng trigger trong sql

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 xuyên được thực hiện để chất vấn ràng buộc (check constraints) trên những 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 bao gồm 2 bảng kho sản phẩm và mua hàng liên kết cùng với nhau vì mã hàng.

Xem thêm: Tốc Độ Ghz Là Gì - Có Thực Sự Quan Trọng Không

*

Khi fan dùng đặt hàng hãy auto cập nhật số lượng tồn vào bảng kho hàng.

Giải pháp

Khi bạn 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 vào kho = con số còn - Số lượt đặtNgười dùnghủykhông đặt đơn hàng nữa:Số lượng còn vào 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ợpinsertdeleteta tiến hành bình thường. Nhưng mà trong ngôi trường hợpupdateSố lượng sản phẩm tồn sẽ sảy ra vào 3 trường hợp sau.Số lượng đặt thuở đầu = 5 tiếp nối tăng lên 10 => con số trong kho sẽ sút 10 tương ứngSố lượng đặt bây giờ = 10 tiếp nối giảm xuống 3 => con số trong kho vẫn 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 tiến hành update csdl trong sql sẽ chạy vấn đề insert tài 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 thực hiện Trigger luôn luôn tồn trên 2 bảnginserteddeletedta đã rút ra 1 công thức update trung trong các trường hợp

SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang

Thực hiện qua ví dụ như nhỏ

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

Đặt mặ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 nhưng mà không tương quan đến số lượng

*

Xóa đối kháng đặt hàng

*

Source code bài toàn

Trigger thêm

*

Trigger Xóa

*

Trigger Sửa

*

/* update 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 vào 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 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 đơn 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 nhưng bạn thực hiện Trigger là không buộc phải và bọn họ thường tưởng rằng vì vậy mà chả ai cần sử dụng nó là hoàn toàn sai. Cơ mà Trigger theo như mình tò mò qua thì vẫn có tương đối nhiều nơi sẽ áp dụng nó vào mục đích riêng của họ.

Cảm ơn vì chúng ta đã đọc.

Via số lượng còn tăng sút tùy ý vấn đề Ở 2 trường vừa lòng insert cùng delete ta triển khai bình thường. Tuy nhiên trong trường hợp update con số hàng tồn sẽ sảy ra vào 3 trường thích hợp sau. Số lượng đặt ban sơ = 5 tiếp nối tăng lên 10 => con số trong kho sẽ giảm 10 tương ứng con số đặt bây giờ = 10 tiếp nối giảm xuống 3 => số lượng trong kho đang tăng 7 tương ứng Tận dụng việc trong sql câu lệnh update = Insert new row khổng lồ Delete old row cõ tức là khi triển khai update cơ sở dữ liệu trong sql vẫn chạy việc insert tài liệu mới trước sau đó sẽ xóa đi bảng cũ. Xử lý vấn đề tận dụng việc áp dụng Trigger luôn tồn trên 2 bảng inserted và deleted ta vẫn rút ra 1 công thức cập nhật trung trong mọi trường đúng theo SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang thực hiện qua ví dụ như nhỏ ban đầu thêm dữ liệu và select nó ra