Trigger trong sql

  -  

Trigger là gì ?

Hiểu đơn giản dễ dàng thì Trigger là một trong những stored procedure không tồn tại tsay đắm số. Trigger triển khai một giải pháp auto Khi 1 trong cha câu lệnh Insert, Update, Delete làm biến hóa tài liệu nằm trong bảng bao gồm đựng trigger.

Bạn đang xem: 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 cần sử dụng làm gì ?

Trigger thường xuyên được thực hiện nhằm soát sổ ràng buộc (check constraints) bên trên nhiều quan hệ tình dục (các bảng/table) hoặc bên trên nhiều chiếc (nhiều record) của bảng.

Bài toán đặt ra.

Quý khách hàng bao gồm 2 bảng kho mặt hàng cùng đặt đơn hàng links cùng nhau do mã hàng.

Xem thêm: Tỷ Lệ An Toàn Vốn Tối Thiểu Là Gì, Hệ Số Car Là Gì, Tỷ Lệ An Toàn Vốn Tối Thiểu Là Gì

*

lúc người tiêu dùng đặt hàng hãy tự động hóa cập nhật con số tồn vào bảng kho sản phẩm.

Giải pháp

lúc người dùng đặt đơn hàng ta chỉ tất cả 3 các loại thao tác thiết yếu với DataBase 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 = Số lượng còn - Số lượt đặtNgười dùnghủykhông đặt 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 bớt tùy ý

Vấn đề

Tại 2 trường hợpinsertdeleteta triển khai bình thường. Nhưng trong ngôi trường hợpupdateSố lượng mặt hàng tồn sẽ sảy ra vào 3 trường đúng theo sau.Số lượng đặt ban đầu = 5 tiếp đến tăng thêm 10 => con số trong kho vẫn giảm 10 tương ứngSố lượng đặt bây giờ = 10 tiếp nối giảm đi 3 => con số trong kho đang tăng 7 tương ứngtận dụng bài toán trong sql câu lệnhupdate = Insert new row To Delete old rowcõ nghĩa là khi tiến hành update DataBase trong sql vẫn chạy Việc insert dữ liệu new trước sau đó sẽ xóa đi bảng cũ.

Giải quyết vấn đề

tận dụng điểm mạnh câu hỏi thực hiện Trigger luôn lâu dài 2 bảnginserteddeletedta đang rút ra 1 cách làm update trung trong phần đông trường hợp

SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang

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

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

Đặt mặt hàng 5 thành phầm cùng 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 ban bố khác mà lại không liên quan cho số lượng

*

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

*

Source code bài bác toàn

Trigger thêm

*

Trigger Xóa

*

Trigger Sửa

*

/* update sản phẩm vào kho sau khoản thời gian đặt 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 sản phẩm vào kho sau khi cập nhật đặt đơn 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 mặt hàng trong kho sau khi diệt đặ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 chúng ta sử dụng Trigger là ko cần cùng họ hay tưởng rằng chính vì vậy nhưng chả ai cần sử dụng nó là trọn vẹn không nên. Nhưng Trigger theo nhỏng bản thân tò mò qua thì vẫn có khá nhiều nơi đã thực hiện nó vào mục tiêu riêng rẽ của họ.

Xem thêm: Cách Chuyển Tiền Qua Ngân Hàng Vietcombank, Những Cách Chuyển Tiền Vào Tài Khoản Vietcombank

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

Via Số lượng còn tăng sút tùy ý Vấn đề Tại 2 ngôi trường hợp insert và delete ta tiến hành bình thường. Nhưng vào ngôi trường hòa hợp update Số lượng sản phẩm tồn vẫn sảy ra vào 3 trường hợp sau. Số lượng đặt lúc đầu = 5 tiếp đến tạo thêm 10 => con số trong kho đã bớt 10 khớp ứng Số lượng đặt từ bây giờ = 10 kế tiếp giảm sút 3 => số lượng trong kho vẫn tăng 7 tương ứng Tận dụng việc vào sql câu lệnh update = Insert new row To Delete old row cõ nghĩa là khi tiến hành update DataBase vào sql vẫn chạy Việc insert tài liệu new trước tiếp đến sẽ xóa đi bảng cũ. Giải quyết sự việc tận dụng ưu điểm bài toán sử dụng Trigger luôn luôn lâu dài 2 bảng inserted với deleted ta đã rút ra 1 công thức cập nhật trung trong phần đa trường thích hợp SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang Thực hiện nay qua ví dụ bé dại Ban đầu thêm tài liệu với select nó ra