1. Trang chủ
  2. » Tất cả

09.Trigger

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Trigger
Trường học Khoa CNTT - Hệ Quản Trị Cơ Sở Dữ Liệu
Chuyên ngành Hệ Quản Trị Cơ Sở Dữ Liệu
Thể loại Bài học
Năm xuất bản 2008
Định dạng
Số trang 10
Dung lượng 102,2 KB

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

Nội dung

Khoa CNTT - Hệquản trị cơ sởdữli u 35/23/2008 Trigger là gì Trigger là một stored procedure ñặc biệtñược gọi tự ñộngkhi user cập nhật dữliệu trên một table ðược kết hợp với table: ðược

Trang 1

5/23/2008 Khoa CNTT - Hqun tr c sd li u 1

BÀI 9.

TRIGGER

Hi ể u ñượ c trigger là gì, công d ụ ng c ủ a nó

T ạ o trigger.

Xoá trigger

Thay ñổ i trigger

1 Gi ớ i thi ệ u Triggers

2 ðị nh ngh ĩ a Triggers

3 Triggers làm vi ệ c nh ư th ế nào

4 Các ví d ụ Triggers

5 Các l ư u ý

Trang 2

Khoa CNTT - Hqun trị cơ sởdli u 3

5/23/2008

Trigger là gì

 Trigger là một stored procedure ñặc biệtñược gi tự ñộngkhi

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 nhn 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

 ðể 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á

Trang 3

Khoa CNTT - Hqun trị cơ sởdli u 5

5/23/2008

 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 kim 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.

Trang 4

Khoa CNTT - Hqun trị cơ sởdli u 7

5/23/2008

Triggers hot ñộ ng nh ư th ế nào ? (3)

 Triggers không tr ả k ế t qu ả v ề

 Triggers có th ể ñ i ề u khi ể n multi-row actions:

một hànhñộngINSERT, UPDATE, hoặcDELETEgọ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

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 có 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

Trang 5

Khoa CNTT - Hqun trị cơ sởdli u 9

5/23/2008

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 ]

}

}

 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 ể

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.

Trang 6

Khoa CNTT - Hqun trị cơ sởdli u 11

5/23/2008

 { [DELETE] [,] [INSERT] [,] [UPDATE] } :

 Ch ỉ ñị nh action g ắ n v ớ i trigger

 ðố i v ớ i INSTEAD OF triggers, action DELETEkhông cho phép trên

table mà có relationship mà ch ỉ ñị nhCASCADE ON DELETE.

 T ươ ng t ự , action UPDATEkhông cho phép trên table có relationships

CASCADE ON UPDATE.

 Tabledeletedinsertedlà 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

 Các giá trịkiểutext, ntext, hoặcimagetrong table inserted

deletedkhô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ặcimagetrong table insertedhoặcdeleted

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ông dùng cho action delete

 With Append: Chèn thêm trigger này vào các trigger ñã có

trướcñó

Trang 7

Khoa CNTT - Hqun trị cơ sởdli u 13

5/23/2008

Use Northwind

GO

CREATE TRIGGER Empl_Delete ON Employees

AS

IF (SELECT COUNT(*) FROM Deleted ) > 1

BEGIN

RAISERROR(

'You cannot delete more than one employee at a time.',

16, 1)

ROLLBACK TRANSACTION

END

Trang 8

Khoa CNTT - Hqun trị cơ sởdli u 15

5/23/2008

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

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] }

}

Trang 9

Khoa CNTT - Hqun trị cơ sởdli u 17

5/23/2008

Xoá trigger

 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

Trang 10

Khoa CNTT - Hqun trị cơ sởdli u 19

5/23/2008

 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

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

Ngày đăng: 12/01/2013, 15:41

Xem thêm

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w