Trigger là gì ?

Hiểu đơn giản dễ dàng thì Trigger là 1 trong stored procedure không tồn tại tham số. Trigger xúc tiến một cách tự động hóa khi 1 trong các ba câu lệnh Insert, Update, Delete làm thay đổi dữ liệu trên bảng bao gồm chứa trigger.

Bạn đang xem: Trigger trong sql là gì

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 thực hiện để kiểm tra ràng buộc (check constraints) trên các quan hệ (nhiều bảng/table) hoặc trên những dòng (nhiều record) của bảng.

Bài toán đặt ra.

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

Khi người dùng đặt đơn 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 fan dùng đặt hàng ta chỉ có 3 loại làm việc chính với cơ sở dữ liệu là :Insert, Delete, UpdateVậy chỉ việc tạo3 triggertương ứng là okNgười dùngđặt hàng:Số lượng còn trong 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 trong 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 triển khai bình thường. Mà lại trong trường hợpupdateSố lượng sản phẩm tồn sẽ sảy ra trong 3 trường vừa lòng sau.Số lượng đặt thuở đầu = 5 tiếp đến tăng lên 10 => số lượng trong kho sẽ giảm 10 tương ứngSố lượng đặt từ bây giờ = 10 tiếp đến giảm xuống 3 => số lượng trong kho vẫn tăng 7 tương ứngTận dụng vấn đề trong sql câu lệnhupdate = Insert new row lớn Delete old rowcõ tức là khi thực hiện update csdl trong sql vẫn chạy bài toán insert tài liệu mới trước kế tiếp 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 tại 2 bảnginserteddeletedta đang rút ra 1 công thức cập nhật trung trong những trường hợp

SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang

Thực hiện nay qua lấy 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 vài thông tin khác mà lại không liên quan đến số lượng

*

Xóa đối chọi đặt hàng

*

Source code bài toàn

Trigger thêm

*

Trigger Xóa

*

Trigger Sửa

*

/* cập nhật 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 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 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 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ì thế mà chả ai dùng nó là trọn vẹn sai. Tuy nhiên Trigger theo như mình tìm hiểu 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ọ.

Xem thêm: 1314 Có Nghĩa Là Gì - Giải Mã Ý Nghĩa Các Con Số Mật Mã Tình Yêu

Cảm ơn vì các bạn đã đọc.

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