1 / 16

Chương 3. Lập trình trong SQL Server TRIGGER

Chương 3. Lập trình trong SQL Server TRIGGER. Đặt vấn đề. TaiKhoan ( MaTK , ChuTK , SoDuTK ). R1: “ Số tiền tối thiểu mỗi lần rút là 50.000” R2: “ Số tiền tối đa mỗi lần rút : Nếu rút tại quầy giao dịch , số tiền rút không nhiều hơn số dư tài khoản

alec
Download Presentation

Chương 3. Lập trình trong SQL Server TRIGGER

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chương 3. Lập trình trong SQL ServerTRIGGER

  2. Đặtvấnđề TaiKhoan (MaTK, ChuTK, SoDuTK) R1: “Sốtiềntốithiểumỗilầnrútlà 50.000” R2: “Sốtiềntốiđamỗilầnrút: • Nếurúttạiquầygiaodịch, sốtiềnrútkhôngnhiềuhơnsốdưtàikhoản • Nếurúttại ATM, sốtiềnrútkhôngnhiềuhơnsốdưtàikhoảnvàkhôngnhiềuhơn 3.000.000” R3: “Saukhirúttiền, cậpnhậtlạisốdưtàikhoản: SoDuTK=SoDuTK-SoTienGD” GiaoDichRutTien (MaGD, MaTK, ViTriGD, NgayGD, SoTienGD ) 2.000.000 2.000.000 3.000.000 2.000.000 Trigger

  3. Nội dung bài học Trigger làgì Cúphápcàiđặt trigger Hoạtđộngcủa trigger

  4. Trigger là gì? • Trigger làmộtloạistore procedure đượcdùngđểthựchiệnmộtsốxửlýmộtcáchtựđộngkhi có thao tác insert, delete hoặc update trên dữ liệu. • Mộtsốxửlýcụthể: • Kiểmtraràngbuộcdữliệu (phứctạp) • Nhữngtínhtoánnghiệpvụcầnthiếtcóliênquan • Lưuvếtcáchoạtđộng • Biếncốkíchhoạt trigger: • Insert • Update • Delete

  5. Inserted và Deleted • Xử lý của trigger thường cần sử dụng đến hai bảng tạm: Inserted + Deleted • Khi insert: dòng dữ liệu vừa thêm được chèn vào Inserted. • Khi delete: dòng dữ liệu vừa thêm được chèn vào Deleted • Khi update: dòng dữ liệu trước khi sửa chèn vào Deleted, dòng dữ liệu sau khi sửa chèn vào Inserted • Được bộ nhớ chính, HQT tạo và xóa một cách tự động • Có cấu trúc giống như bảng (table) mà trigger định nghĩa trên đó • Chỉ tồn tại trong thời gian trigger đang xử lý • Cục bộ cho mỗi trigger

  6. Cú pháp cài đặt trigger CREATE TRIGGER Tên_Trigger ON Tên_Table AFTER(FOR) | INSTEAD OF INSERT, DELETE, UPDATE AS Các_lệnh_của_Trigger

  7. Các loại trigger • After(For): • Trigger được gọi thực hiện sau khi thao tác delete/ insert/ update tương ứng đã được thực hiện thành công • Các dòng mới được thêm chứa đồng thời trong bảng dữ liệu và bảng inserted • Các dòng bị xoá chỉ nằm trong bảng deleted (đã bị xoá khỏi bảng dữ liệu) • Có thể quay lui thao tác đã thực hiện bằng lệnh rollback transaction • Instead of: • Trigger được gọi thực hiện thay cho thao tác delete/ insert/ update tương ứng • Các dòng mới được thêm chỉ chứa trong bảng inserted • Các dòng bị chỉ định xoá nằm đồng thời trong bảng deleted và bảng dữ liệu (dữ liệu không bị xoá). • Trigger Instead of thường được dùng để xử lý cập nhật trên view

  8. Hoạt động của trigger Yêucầucậpnhật (Insert, Update, Delete) Inserted Deleted CSDL Có trigger loại Instead of Thực hiện Trigger loại INSTEAD OF Xóa Inserted/Deleted Chèn dữ liệu vào Inserted / Deleted Thực hiện Trigger loại AFTER Cập nhật dữ liệu Không có trigger loại Instead of Có trigger loại After Không có trigger loại After

  9. Ví dụ TaiKhoan(MaTK, ChuTK, SoDu) GiaoDichRutTien(MaGD, MaTK, ViTriGD, NgayGD, SoTienGD) Ràngbuộc R2: Sốtiềntốiđamỗilầnrút: • Nếurúttạiquầygiaodịch, sốtiềnrútkhôngnhiềuhơnsốdưtàikhoản • Nếurúttại ATM, sốtiềnrútkhôngnhiềuhơnsốdưtàikhoảnvàkhông nhiềuhơn 3.000.000 • Bảngtầmảnhhưởng Cần cài đặt trigger cho thao tác thêmvàsửaGiaoDịchRutTien

  10. Ví dụ

  11. Bật/Tắt hiệu lực của trigger • Tắt/Bật 1 trigger đã tạo • Tắt/Bật tất cả các trigger đã tạo ALTER TABLE TaiKhoanGiaoDich DISABLE/ENABLE TRIGGER trg_ThemGDRutTien ALTER TABLE TaiKhoanGiaoDich DISABLE/ENABLE TRIGGER ALL

  12. Lưu ý • Lệnh tạo trigger phải là lệnh đầu tiên trong một lô (query batch) • Trên một bảng có thể định nghĩa nhiều trigger after(for)cho mỗi thao tác, nhưng chỉ có thể định nghĩa một trigger instead of cho mỗi thao tác • Không thể định nghĩa trigger instead of update/ delete trên bảng có cài đặt khoá ngoại dạng update cascade/ delete cascade

  13. Một số câu hỏi 1. Cầnphảiviết trigger chocả 3 biếncốkíchhoạt: Insert/Update/Delete không?  Lậpbảngtầmảnhhưởngđểxácđịnh 2. Mộtbảngvừacó constraint vừacó trigger, loạinàosẽthựcthitrước?  Nếucó trigger loạiintead of: chỉthựchiện trigger Ngượclại: constraint thựchiệntrước, trigger thựchiệnsau 3. Vấnđềcậpnhậtmộtlúcnhiềudòngdữliệugiảiquyếtnhưthếnào?  Dùng cursor

  14. Ví dụ trigger loại AFTER

  15. Ví dụ trigger loại INSTEAD OF

  16. Ví dụ chèn nhiều dòng

More Related