Hướng dẫn viết trigger trong sql

Trigger là gì ?

Hiểu đơn giản thì Trigger là 1 stored procedure không có tđắm đuối số. Trigger xúc tiến một biện pháp tự động hóa khi 1 trong bố câu lệnh Insert, Update, Delete có tác dụng đổi khác dữ liệu ở bảng gồm đựng trigger.

Bạn đang xem: Hướng dẫn viết 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 sử dụng làm những gì ?

Trigger thường xuyên được sử dụng để chất vấn ràng buộc (check constraints) bên trên các tình dục (những bảng/table) hoặc bên trên những chiếc (nhiều record) của bảng.

Bài toán thù đặt ra.

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

Xem thêm: Đánh Giá Hp Probook 440 G6 Review, Hp Probook 440 G6 Review

*

lúc người tiêu dùng đặt hàng hãy tự động update con số tồn trong bảng kho sản phẩm.

Giải pháp

Lúc người tiêu dùng đặt hàng ta chỉ có 3 một số loại thao tác thiết yếu với cơ sở dữ liệu là :Insert, Delete, UpdateVậy chỉ việc tạo3 triggerkhớp ứ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ủyko mua 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 thực hiện thông thường. Nhưng trong ngôi trường hợpupdateSố lượng mặt hàng tồn vẫn sảy ra vào 3 trường hòa hợp sau.Số lượng đặt thuở đầu = 5 sau đó tạo thêm 10 => con số vào kho sẽ bớt 10 tương ứngSố lượng đặt bây giờ = 10 sau đó sụt giảm 3 => số lượng vào kho vẫn tăng 7 tương ứngtận dụng lợi thế bài toán trong sql câu lệnhupdate = Insert new row To Delete old rowcõ nghĩa là khi thực hiện update CSDL vào sql vẫn chạy câu hỏi insert tài liệu bắt đầu trước tiếp đến vẫn xóa đi bảng cũ.

Giải quyết vấn đề

tận dụng điểm mạnh bài toán áp dụng Trigger luôn sống thọ 2 bảnginserteddeletedta đã rút ra 1 bí quyết update trung trong những ngôi trường hợp

SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang

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

Ban đầu thêm dữ liệu cùng select nó ra
*

Đặt sản phẩm 5 sản 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 vài công bố khác nhưng mà không liên quan mang đến 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

*

/* cập nhật sản phẩm trong kho sau thời điểm đặ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/* cập nhật mặt hàng trong kho sau khi update mua 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/* update sản phẩm trong kho sau khi diệt đặ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 nhưng mà chúng ta thực hiện Trigger là không yêu cầu cùng bọn họ thường tưởng rằng vì thế mà lại chả ai dùng nó là trọn vẹn không đúng. Nhưng Trigger theo nlỗi mình tìm hiểu qua thì vẫn có rất nhiều chỗ đang thực hiện nó vào mục tiêu riêng biệt của họ.

Cảm ơn vì chưng các bạn sẽ đọc.

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