1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài 13: TRIGGERS pptx

44 225 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 44
Dung lượng 195 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

GIỚI THIỆU  Trigger là một loại stored procedure đặc biệt được thực thi một cách tự động khi có câu lệnh UPDATE, INSERT, DELETE tác động vào table  Trigger là một công cụ mạnh, khi dữ

Trang 1

Bài 13

TRIGGERS

Trang 2

I GIỚI THIỆU

 Trigger là một loại stored procedure đặc biệt được

thực thi một cách tự động khi có câu lệnh UPDATE, INSERT, DELETE tác động vào table

 Trigger là một công cụ mạnh, khi dữ liệu bị sửa đổi,

nó sẽ tự động thực hiện việc ép buộc các giao dịch sửa đổi này thực hiện theo quy tắc đã định nhằm đảm bảo tính toàn vẹn dữ liệu

 Các trigger thực thi sau khi các câu lệnh bên trong nó

hoàn tất, nếu có lổi thì trigger sẽ không thực thi

 Trigger tự động thực thi, không gọi trigger thi hành

một cách trực tiếp

Trang 3

I GIỚI THIỆU

2. LOẠI TRIGGERS: Có 2 loại :

• AFTER triggers hoặc for trigger : thực thi sau khi

thực hiện insert/ delete các dòng trong table, gọi là reactive, chỉ tạo trên table Khi tạo trigger nếu

không chỉ định rõ thì mặc định là AFTER Trigger,

• INSTEAD OF triggers: kiểm tra trứơc khi thực

hiện Insert/Delete, gọi là proactive, tạo trên table và view

Table1 có trigger1, table2 có trigger2, nếu thao tác trên table1 có liên quan đến table2 thì trigger2 tự động thực thi, gọi là trigger lồng (Nested Trigger)

Trang 4

I GIỚI THIỆUFor/After Instead of

- Chỉ áp dụng cho table - áp dụng cho table, view

- Có thể định nghĩa nhiều

trigger trên một hành động

I/U/ D

- Chỉ định nghĩa một Trigger trên một hành động I/U/D

Thực thi sau khi :

+ xử lý ràng buộc + thực hiện xong hành động I/U/D phát sinh trigger

- Thi hành trước khi:

+ Xử lý ràng buộc + Thay thế hành động phát sinh trigger

- Không xây dựng được trên table có áp dụng cascade

delete/ update

Trang 5

I GIỚI THIỆU

• Ràng buộc toàn vẹn dữ liệu

• Kiểm soát dữ liệu khi có sự thay đổi giá trị trong

bảng

• Xử lý dữ liệu trên nhiều dòng

• Tạo thông báo lổi

• Phát sinh giá trị tính toán

3 ĐẶC ĐIỂM và HẠN CHẾ:

• Không ngăn ngừa thay đổi cấu trúc mà nó chỉ kiểm

tra sự thay đổi hay xoá dữ liệu trong các table có quan hệ với nhau

Trang 6

I GIỚI THIỆU

• Kiểm tra constraint trước, sau đó đến trigger

• Không dùng quá nhiều trigger trong một bảng

• Không tạo trigger trên đối tượng Temporary

• Có thể xử lý dữ liệu trên nhiều dòng

• Trong trigger không có các lệnh:create, drop, alter

table, alter database, truncate table, select into

Trang 7

II TẠO TRIGGER

1 T ẠO TRIGGER

Sử dụng công cụ Interprise Manager

− Click phải trên tên của Table

− Chọn All Tasks  Manage Trigger

Tạo bằng lệnh T-SQL:

− Cú pháp:

CREATE TRIGGER trigger_name

ON table|View [WITH ENCRYPTION]

{ FOR | AFTER| INSTEAD OF } { [INSERT] [,] [UPDATE] [,] [DELETE] } [WITH APPEND] [NOT FOR REPLICATION]

AS sql_statement [ n ]

Trang 8

II TẠO TRIGGER

Thông tin về trigger được lưu trong table sysObjects

và syscommands

sp_helptext Trigger_Namesp_helptrigger Table_Namesp_depends Table_Name

Ví dụ 1:

Create trigger trAddAuthor

On Authors For Insert, update

As raiserror(“%d row have been

modified”,0,1,@@rowcount)Return

Trang 9

II TẠO TRIGGER

 Trigger trAddAuthor sẽ khởi động khi người sử dụng

cập nhật hoặc chèn dữ liệu vào bảng Author

Ví dụ:

Insert authors

(‘555-66-7777’,’Frog’,’Kermit’,’8000-444-5656’,’123 Sesame Street’,’West EastBrooke’, ’CA’,

’90221’, 0)

Trang 10

II TẠO TRIGGER

VD2: Create table SANPHAM

(masp int not null, tensp nvarchar(30) not null, mancc nvarchar(5), dvtinh nvarchar(10), soluong int, dongia int )

CREATE TRIGGER chenSP

ON SANPHAM FOR INSERT

Trang 11

II TẠO TRIGGER

2. Trigger tự động thực thi khi gặp 3 biến cố:

Insert Trigger: Mệnh đề For Insert thực thi khi có

một record được thêm vào bảng, SQL tạo ra bảng INSERTED lưu record được chèn, bảng này tồn tại trong quá trình trigger thực thi

Delete Trigger: Trigger thực thi khi có record bị

xoá, SQL tạo ra bảng DELETED để lưu record bị xoá

Update Trigger: Khi có record được cập nhật, giá

trị của các cột có liên quan đến trigger sẽ được kiểm tra trứơc khi cập nhật, mẫu tin đựơc cập nhật

sẽ được lưu vào bảng INSERTED (mẫu tin mới được cập nhật) và bảng DELETED (mẫu tin cũ)

Trang 12

III AFTER TRIGGERS

a) Insert Trigger :

Ví dụ 1: CREATE TRIGGER Trg_NgayLap_NgayGiaoHD

ON Hoadon AFTER INSERT

Trang 13

III AFTER TRIGGERS

Trang 14

II AFTER TRIGGERS

b) Delete Trigger: C ó 3 phương thức thực hiện tham

chiếu toàn vẹn khi sử dụng Delete Trigger

 The Cascade method

 The Restrict method

 The Nullify method

V í dụ: tạo một trigger xoá một record trong bảng hoá

đơn

Trang 15

II AFTER TRIGGERS

CREATE TRIGGER Trg_Xoa_HD

ON Hoadon AFTER DELETE

AS

SET NOCOUNT ON

IF EXISTS (SELECT * FROM Deleted)

BEGIN

DELETE CT_HOADON WHERE CT_HOADON.MaHD

IN (SELECT hd.MaHD FROM HoaDon hd

INNER JOIN Deleted d ON hd.MaHD=d.Mahd)

RAISERROR('Cac chi tiet HD da bi xoa',10,1)

END

SET NOCOUNT ON

Trang 16

-III AFTER TRIGGERS

Trang 17

II TẠO VÀ HIỆU CHỈNH TRIGGER

Trang 18

III AFTER TRIGGERS

Trang 19

III AFTER TRIGGERS

Trang 20

III AFTER TRIGGERS

Print ‘Ngay lap hoa don phai nho hon hoac

bang ngay hien hanh’

RollBack Transaction END

Trang 21

IV INSTEAD OF TRIGGERS

INSTEAD of Trigger: chỉ có ở SQL Server 2000, thi hành

thay cho các câu lệnh Insert, Delete, Update do đó khi tạo trigger kiểu này ta phải viết lại các câu lệnh Insert, Delete, Update đối với dữ liệu, có thể áp dụng cho

table và view, trừ các view có WITH CHECK

OPTION

1. INSTEAD OF INSERT Trigger: giống như AFTER

trigger, INSTEAD of INSERT Trigger làm việc với

bảng Inserted Khi thực thi câu lệnh INSERT

Nếu record không vi phạm các ràng buộc thì nó được chèn vào bảng Inserted, không chèn vào bảng cơ sở

Trigger kích hoạt và thực thi những hành động cần

thiết

Trang 22

IV INSTEAD OF TRIGGERS

VD: CREATE TRIGGER InsOrdDet ON [Order Details]

INSTEAD OF INSERT

AS

DECLARE @qty int

SELECT @qty=quantity FROM Inserted

IF @qty<= (SELECT UnitsInStock FROM Products P JOIN Inserted I ON P.ProductID = I.ProductID)

INSERT INTO [Order Details]

SELECT * FROM Inserted

ELSE

RAISERROR(‘Not enough products in stock’, 16, 1)

Trang 23

IV INSTEAD OF TRIGGERS

2. INSTEAD OF DELETE Trigger:

Khi thực thi câu lệnh DELETE

• Nếu record không vi phạm các Constraint, thì nó

chỉ được Insert vào bảng Deleted

• Trigger kích hoạt và thực thi những hành động cần

thiết

2. INSTEAD OF UPDATE Trigger: làm việc với bảng

Inserted and Deleted lưu trữ giá trị trứơc và sau update Không update dữ liệu trong bảng cơ sở

Trang 24

IV INSTEAD OF TRIGGERS

Khi thực thi câu lệnh Update

Nếu record không vi phạm các ràng buộc, thì record cũ được inserted vào bảng Deleted, record mới được

insert vào bảng Inserted

Trigger kích hoạt và thực thi các hành động cần thiết

Lưu ý: INSTEAD OF UPDATE trigger không được định

nghĩa trên table có tuỳ chọn ON UPDATE

CASCADE trong ràng buộc FOREIGN KEY

Trang 25

IV INSTEAD OF TRIGGERS

Đối với view: INSTEAD OF triggers có ích với views vì

chúng có thể nâng cao khả năng cập nhật của view

VD:

CREATE VIEW [Alphabetical list of products]

AS

SELECT Products.*, Categories.CategoryName

FROM Categories INNER JOIN Products

ON Categories.CategoryID = Products.CategoryID

WHERE Products.Discontinued=0

Trang 26

IV INSTEAD OF TRIGGERS

CREATE TRIGGER InsLP ON [Alphabetical list of products] INSTEAD OF INSERT AS

IF EXISTS(SELECT * FROM Inserted I JOIN Category C

ON I.CategoryID=C.CategoryID) INSERT INTO Products(ProductID, ProductName,

SupplierID, CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel,

Discontinued) SELECT ProductID, ProductName, SupplierID,

CategoryID, QuantityPerUnit, UnitPrice, UnitsInStock,

UnitsOnOrder, ReorderLevel, Discontinued

FROM Inserted

Trang 27

IV INSTEAD OF TRIGGERS

ELSE

BEGIN

BEGIN TRANSACTION

INSERT INTO Category(CategoryName)

SELECT CategoryName FROM Inserted

INSERT INTO Products(ProductID,ProductName,

SupplierID, CategoryID, QuantityPerUnit, UnitPrice,

UnitsInStock, UnitsOnOrder,ReorderLevel, Discontinued) SELECT ProductID, ProductName, SupplierID,

@@IDENTITY, QuantityPerUnit, UnitPrice,

UnitsInStock, UnitsOnOrder, ReorderLevel,Discontinued FROM Inserted

COMMIT TRANSACTION END

Trang 28

V ALTER TRIGGERS

1. Trong một số trường hợp trigger trở thành gánh nặng,

ví dụ ta muốn import 100 record mới vào bảng thì tốt nhất là nên vô hiệu hoá các trigger

Câu lệnh ALTER TABLE cho phép bạn enable và

disable trigger:

ALTER TABLE table_name

{ ENABLE | DISABLE } TRIGGER{ ALL | trigger_name [ , n ] }

Trang 29

V ALTER TRIGGERS

Ví dụ:

ALTER TABLE [Order Details]

DISABLE TRIGGER ALL

Xoá trigger:

DROP TRIGGER Trigger_Name

Trang 30

V Nested Trigger

1 Trigger lồng :

Thao tác của một trigger kéo theo việc thi hành một

trigger khác , các trigger này đựơc gọi là trigger lồng nhau.

Có thể lồng tối đa 32 cấp

Các trigger được xem như một đơn vị thi hành

transaction Do vậy, một trigger trong dãy trigger lồng nhau bị lỗi, thi SQL Server sẽ rollback tất cả các action đã thực hiện bởi các trigger.

Trang 31

V Nested Trigger

Sửa data

trên table 1

Sửa data trên table 2 Trigger1

Trigger2

gọi

2 Trigger gọi chính nó (recursive trigger ) :

Để tạo trigger dạng này phải bật option của database:sp_dboption database_name, ‘rescusive triggers’, True

Trang 32

Sửa data trên table 2

Trang 33

I C ác ví dụ tổng hợp

vd1

CREATE TRIGGER ThemxoaCTHD ON [Order

Details] FOR INSERT, UPDATE

Trang 34

I C ác ví dụ tổng hợp

vd2

CREATE TRIGGER Trg_NgayLap_NgayGiaoHD

ON Orders AFTER INSERT

Trang 35

kiem tra

set IDENTITY_INSERT orders on

insert orders(orderid,customerid,employeeid,orderdate,requireddate) values

(10178,'tomsp',3,'1/1/2005','12/3/2004')

Trang 41

I C ác ví dụ tổng hợp

CAU 2

tao bang hoadon_luu LUU Y TAO THU TU CAC

FIELD GIONG BANG HOADON

CREATE TABLE HOADON_LUU (MAHD INT

PRIMARY KEY,MAKH CHAR(5),MANV

INT,NGAYLAPHD DATETIME,NGAYGIAO DATETIME,LOAIHD

VARCHAR(10),NOICHUYEN NVARCHAR(15)) SELECT * FROM HOADON_LUU

Trang 43

I C ác ví dụ tổng hợpBEGIN

RAISERROR(60000,16,1,'MAKH','HOADON','MA KH','HOADON')

ROLLBACK END

ELSE

INSERT HOADON_LUU SELECT * FROM INSERTED

Trang 44

I C ác ví dụ tổng hợp

KIEM CHUNG

INSERT INTO

HOADON(MAHD,MAKH,MANV,LOAIHD,NOIC HUYEN) VALUES (145,'TOMSP',1,'1','TPHCM') SELECT * FROM HOADON

SELECT * FROM HOADON_LUU

Ngày đăng: 08/07/2014, 08:21

HÌNH ẢNH LIÊN QUAN

Bảng bảng - Bài 13: TRIGGERS pptx
Bảng b ảng (Trang 5)
Bảng bảng Inserted. Khi th Inserted. Khi th ực thi câu lệnh  ực thi câu lệnh  INSERT  INSERT - Bài 13: TRIGGERS pptx
Bảng b ảng Inserted. Khi th Inserted. Khi th ực thi câu lệnh ực thi câu lệnh INSERT INSERT (Trang 21)

TỪ KHÓA LIÊN QUAN

w