intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Trigger

Chia sẻ: Lê Văn Tình | Ngày: | Loại File: PPT | Số trang:20

192
lượt xem
45
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'trigger', công nghệ thông tin, cơ sở dữ liệu phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: Trigger

  1. TRIGGER Sau bài học này, sinh viên có thể:  Hiểu được trigger là gì, công dụng của nó  Tạo trigger.  Xoá trigger  Thay đổi trigger   GV Phạm Thị Lan Anh 1
  2. Nội dung bài học Giới thiệu Triggers 1. Định nghĩa Triggers 2. Triggers làm việc như thế nào 3. Các ví dụ Triggers 4. Các lưu ý 5. GV Phạm Thị Lan Anh 2
  3. Trigger là gì Trigger là một stored procedure đặc biệt được gọi tự   động khi user cập nhật dữ liệu trên một table Được kết hợp với table: Được định nghĩa trên một   table cụ thể . Được gọi tự động: Khi có một thao tác cập chật dữ   liệu trên table (insert, update, hoặc delete) thì trigger  của thao tác tương ứng được tự động thực hiện.  Khác với procedure, trigger không thể được gọi trực   tiếp, không nhận tham số Là một phần của transaction: những lệnh trong   trigger được xem là một single transaction, có thể  được roll back từ bất kỳ chổ nào trong trigger GV Phạm Thị Lan Anh 3
  4. Sử dụng trigger để làm gì? Để thực hiện cascade updates và cascade deletes   qua các table quan hệ trong database Ép buộc tính toàn vẹn dữ liệu phức tạp : Thực hiện   các ràng buộc có tham chiếu đến các column trong  nhiều table. Định nghĩa Custom Error Messages: Dùng trigger để   trả về các chuỗi thông báo trạng thái của một hàng  động nào đó.  Bảo trì các dữ liệu không được chuẩn hoá: !   GV Phạm Thị Lan Anh 4
  5. Triggers hoạt động như thế nào? Triggers được thực hiện tự động sau khi lệnh INSERT,   UPDATE, hoặc DELETE được thực hiện trên một table mà  trigger đó được định nghĩa. Còn các constraints và INSTEAD  OF trigger sẽ được kiểm tra trước khi lệnh  INSERT, UPDATE,  hoặc DELETE thực hiện. Constraints sẽ được kiểm tra trước trigger.  Một table có thể có nhiều Triggers cho một action. Một trigger   có thể được định nghĩa cho nhiều action. Khi có nhiều trigger trong một table, thì table owner có thể dùng   procedure hệ thống sp_settriggerorder để chỉ định trigger đầu  và trigger cuối để thực thi. Thứ tự của các trigger còn lại không  thể sắp xếp được.  User phải có quyền để thực hiện tất cả các lệnh mà được định   nghĩa trong Triggers Table Owners không thể tạo ra các Triggers trên Views hoặc    Temporary Tables nhưng có thể tham chiếu đến view và  temporary. GV Phạm Thị Lan Anh 5
  6. Triggers hoạt động như thế nào Triggers không trả kết quả về.  Triggers có thể điều khiển multi­row actions:   một hành động INSERT, UPDATE, hoặc  DELETE gọi một trigger có thể ảnh hưởng lên  nhiều dòng dữ liệu, Ta có thể chọn:  Xử lý tất cả các dòng cùng với  nhau trong trường   hợp các dòng ảnh hưởng phải thoả điều kiện của  trigger.  Xử lý từng dòng thỏa điều kiện.  GV Phạm Thị Lan Anh 6
  7. Logic tables Khi có action Insert, table logic inserted sinh   ra, có cấu trúc giống với cấu trúc table được  insert, có dữ liệu là record đang được insert Khi co action delete, table deleted sinh ra, có   cấu trúc giống với cấu trúc table bị deleted,  có dữ liệu là record đang bị xoá Khi có action update, có 2 table inserted và   deleted GV Phạm Thị Lan Anh 7
  8. Tạo trigger CREATE TRIGGER trigger_name  ON { table | view }  [ WITH ENCRYPTION ]  {      {{ FOR | AFTER | INSTEAD OF }            { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE] }           [ WITH APPEND ]         AS          [ { IF UPDATE ( column )              [ { AND | OR } UPDATE ( column ) ]  [ ...n ]            } ]          sql_statement [ ...n ]      }  }  GV Phạm Thị Lan Anh 8
  9. Tham số (1) Table | view : tên view/table mà tigger được thực hiện   khi có action tương ứng.  WITH ENCRYPTION: mã hoá nột dung text của lệnh   create trigger trong table  syscomments.  AFTER: Trigger sẽ được gọi chỉ khi tất cả các hành   động đã thực hiện xong. Các kiển tra constrain và  cascade sẽ được kiểm tra hoàn thành trước khi  trigger thực hiện. Default là AFTER nếu chỉ có từ  khoá FOR được chỉ định. AFTER trigger không thể  định nghĩa trên view. INSTEAD OF: chỉ định trigger đựoc thực hiện thay   cho action của trigger. INSTEAD OF triggers không  cho phép cập nhật dữ liệu trên view có WITH CHECK  OPTION. GV Phạm Thị Lan Anh 9
  10. Tham số (2) { [DELETE] [,] [INSERT] [,] [UPDATE] } : chỉ định   action gắn với trigger. Đối với  INSTEAD OF triggers,  action DELETE không cho phép trên table mà có  relationship mà chỉ định CASCADE  ON DELETE.  Tương tự, action UPDATE không cho phép trên table  có relationships mà CASCADE ON UPDATE. Table deleted và inserted là logical tables. Chúng có   cấu trúc giống với table mà trigger được định nghĩa,  chứa các dòng giá trị cũ hoặc mới mà có thể thay đổi  bởi action của user. Ta có truy xuất dữ liệu trong 2  table này trong định nghĩa trigger.  GV Phạm Thị Lan Anh 10
  11. Tham số (3) Các giá trị kiểu text, ntext, hoặc image trong table   inserted và deleted không truy xuất được.  Khi trigger ở mức 65, giá trị null sẽ được trả về cột có   kiểu text, ntext, hoặc image trong table inserted  hoặc deleted nếu cột cho phép null; chuỗi zero­ length được trả về nếu cột có thể null.  IF UPDATE (column): kiểm tra action update trên   cột được chỉ định, khôgn dùng cho action delete.  With Append: Chèn thêm trigger này vào các trigger   đã có trước đó GV Phạm Thị Lan Anh 11
  12. Ví dụ Use Northwind GO CREATE TRIGGER Empl_Delete ON Employees FOR DELETE AS IF (SELECT COUNT(*) FROM Deleted) > 1 BEGIN     RAISERROR(      'You cannot delete more than one employee at a time.',          16, 1)     ROLLBACK TRANSACTION END GV Phạm Thị Lan Anh 12
  13. Những lệnh sau đây không được  dùng trong định nghĩa trigger GV Phạm Thị Lan Anh 13
  14. Ví dụ (1) USE pubs  IF EXISTS (SELECT name FROM sysobjects  WHERE name = 'reminder' AND type = 'TR')  DROP TRIGGER reminder  GO  CREATE TRIGGER reminder ON titles  FOR INSERT, UPDATE  AS  RAISERROR (50009, 16, 10)  GO  GV Phạm Thị Lan Anh 14
  15. Alter trigger ALTER TRIGGER trigger_name  ON table [WITH ENCRYPTION] {{FOR {[,] [DELETE] [,] [UPDATE] [,][INSERT]}     AS sql_statement [...n] }    |{FOR {[,] [INSERT] [,] [UPDATE]}     AS IF UPDATE (column) [{AND | OR} UPDATE (column) [,...n]] sql_statement [...n] } } GV Phạm Thị Lan Anh 15
  16. Xoá trigger DROP TRIGGER trigger_name GV Phạm Thị Lan Anh 16
  17. Bài tập áp dụng (QLVT) Tạo trigger để khi insert một record vào trong   table CHITIETHOADON, thì cập nhật lại  SLTON của vật tư đó trong table VATTU Tạo trigger để không cho phép một hoá đơn   có nhiều hơn 4 chi tiết hoá đơn Tạo trigger không cho phép hai vật tư trùng   tê n Tạo trigger để không cho phép xoá cùng lúc   nhiều hơn một khách hàng GV Phạm Thị Lan Anh 17
  18. Tạo trigger để không cho phép xoá một   vật tư mà đã có ít nhất một chi tiết hoá  đơn của vật tư đó. Tạo trigger để kiểm tra số lượng bán ra   của một vật tư phải nhỏ hơn số lượng  tồn trong kho GV Phạm Thị Lan Anh 18
  19. create trigger t1 on chitiethoadon1 for insert as declare @sl int, @mavt varchar(10) select @sl = sl, @mavt = mavt from inserted update vattu1 set slt=slt­ @sl where mavt  =@mavt GV Phạm Thị Lan Anh 19
  20. Lich kiem tra Thu hai, ngay 1/5/06 nghi le.  Thu hai, ngay 8/5/06, hoc bu   Thu hai, ngay 15/5/06 kiem tra thuc   hanh mon HQTCSDL: Tu 13:00: nhom 6  Tu 14:30: nhom 4 + 5   GV Phạm Thị Lan Anh 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2