BÀI TẬP TRIGGER CÓ LỜI GIẢI

     

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 triển khai một cách tự động hóa khi một trong các ba câu lệnh Insert, Update, Delete làm biến hóa dữ liệu trên bảng bao gồm chứa trigger.

Bạn đang xem: Bài tập trigger có lời giải

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 áp dụng để 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 các dòng (nhiều record) của bảng.

Bài toán đặt ra.

Bạn bao gồm 2 bảng kho hàng và mua hàng liên kết cùng với nhau do mã hàng.

Xem thêm: Bật Mí Những Cái Tên Trung Quốc Hay Cho Con Trai, Con Gái Ý Nghĩa Nhất

*

Khi bạn dùng đặt hàng hãy tự động hóa 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ỉ 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ạ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 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 để =>Số lượng còn tăng giảm tùy ý

Vấn đề

Ở 2 trường hợpinsertdeleteta thực hiện bình thường. Cơ mà trong trường hợpupdateSố lượng sản phẩm tồn đã sảy ra trong 3 trường vừa lòng sau.Số lượng đặt ban đầu = 5 sau đó tăng lên 10 => con số trong kho sẽ giảm 10 tương ứngSố lượng đặt hôm nay = 10 sau đó giảm xuống 3 => con số trong kho sẽ tăng 7 tương ứngTận dụng câu hỏi trong sql câu lệnhupdate = Insert new row khổng lồ Delete old rowcõ nghĩa là khi thực hiện update csdl trong sql đang chạy việc 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 áp dụng Trigger luôn luôn tồn tại 2 bảnginserteddeletedta vẫn rút ra 1 công thức update trung trong những trường hợp

SLTonKhoCu = SLTonKhoCu - inserted.SLDatHang + deleted.SLDatHang

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

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

Đặt mặt hàng 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 số trong những thông tin khác mà không liên quan đến số lượng

*

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

Xem thêm: Luyện Đọc Hiểu Tiếng Anh Thi Đại Học, Hướng Dẫn Phương Pháp Làm Bài Đọc Hiểu Tiếng Anh

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

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