You are on page 1of 23

By Li (Triggers)

Nguyn Trng Anh E-Mail: anh@tronganh.com tronganh@gmail.com Home: http://www.tronganh.com

Tm tt
Khi nim v Trigger S dng Trigger rng buc trn vn d liu S dng Trigger cho tham chiu ton vn ng To ra cc quy tc ton vn d liu ng S dng INSTEAD OF Trigger to nn VIEWs

SQL server 2000

6-2

Tm tt
Nhng Trigger thng thng Kim sot Trigger Thc hin Trigger

SQL server 2000

6-3

Khi nim Trigger


Trigger l mt dng c bit ca th tc thng tr dng phn hi mt s kin c th. Trigger l mt on m c gn vo bng d liu. Chng c thc hin khi c mt s kin tng ng vi Trigger c gn cho s kin y Trigger khng s dng hai c tnh ca th tc thng tr l tham s v gi tr tr v. Cn cn nhc trc khi dng Trigger
SQL server 2000
6-4

Mt s ng dng thng dng


Rng buc ton vn d liu cho ph hp vi m hnh quan h c s d liu. Kim sot d liu hin ti khi c thay i n gi tr trong mu tin ca bng. Kim tra d liu nhp vo, ph hp vi mi lin h d liu gia cc bng vi nhau. Kim chng khi xo bn ghi trong bng
SQL server 2000
6-5

Phn loi chnh


Da vo ng dng ca Trigger trn mt bng d liu, Trigger c ba loi nh sau: INSERT Triggers UPDATE Triggers DELETE Triggers Tp hp ca ba loi trn
SQL server 2000
6-6

C php
C php to mt Trigger ging nh to th tc thng tr. Tuy nhin, Trigger c to ra cho bng d liu c th.
Create Trigger <Tn Trigger> On <Tn bng | Tn Views> [WITH ENCRYPTION] { { For | After } < [Delete] [, ] [Insert] [, ] [Update] > | INSTEAD OF } AS < Cu lnh SQL>
SQL server 2000
6-7

Ch
ON : ch ra rng Trigger c vit cho bng hoc tn bng o. Trigger vi t kho AFTER khng h tr VIEW. With Encryption: Ging nh trong Th tc thng tr hoc bng o cho php ngn nga vic sa i ni dung Trigger. S dng ALTER Trigger th with Encryption khng h tr.

SQL server 2000

6-8

Ch
FOR | AFTER Mnh FOR (AFTER) ch ra rng Trigger s p dng cho hnh ng no trong ba hnh ng sau: INSERT, DELETE, UPDATE. Mnh c dng nh sau:
FOR INSERT FOR DELETE FOR UPDATE FOR INSERT, UPDATE, DELETE
SQL server 2000
6-9

Insert Trigger
S dng mnh FOR INSERT s thc hin khi c mu tin c thm vo bng. Vi mi bn ghi c Insert, SQL s to ra mt bng sao ca bn ghi v lu bng sao ca bn ghi ny vo trong bng mang tn INSERTED. Bng ny ch tn ti trong qu trnh.

SQL server 2000

6-10

DELETE TRIGGER
Ging nh Trigger Insert, mi khi c bn ghi c xo khi bng th Trigger ny thc hin vic kim tra d liu. Nu tho mn cc iu kin th bn ghi ny c xo khi bng. Nu khng th bn ghi tr li gi tr bnh thng, hnh ng Delete c hu b. SQL server cng to ra mt bng sao cc bn ghi b xo a vo bng DELETED.
SQL server 2000
6-11

Update Trigger
Mi khi c mt bn ghi no c cp nht, gi tr ca nhng ct c lin quan trigger s c kim tra trc khi cp nht

SQL server 2000

6-12

NOT FOR REPLICATION


Nu thm cu lnh ny vo trong Trigger, th Trigger s khng c thc hin tr khi c lin quan n k thut sao chp nhn bn

SQL server 2000

6-13

S dng Trigger rng buc trn vn


Trong trng hp ny Trigger c th c thc hin cc chc nng sau: Quan h 1-1 Kim tra tnh duy nht ca lp loi. Kim tra d liu khi cn thit vi iu kin rng buc d liu
SQL server 2000
6-14

Trigger for Insert


Create trigger trgIns on shippers for insert AS if not exists(Select 'True' From Inserted I where i.Price > 2) Begin raiserror('Khong them ban ghi moi voi Price < 2',16,1) rollback tran END
SQL server 2000
6-15

Trigger For Delete


Create Trigger trgDel on Shippers For Delete AS if not exists(Select 'True' From Deleted I where i.Price > 2) Begin raiserror('Khong Xoa ban ghi moi voi Price < 2',16,1) rollback tran END
SQL server 2000
6-16

Trigger for Update


Create Trigger trgUpdate on Shippers For update AS if not exists(Select 'True' From updated I where i.Quantity > 2) Begin raiserror('Khong Cap Nhat ban ghi moi voi Price < 2',16,1) rollback tran END
SQL server 2000
6-17

Trigger kim tra quy tc rng buc


ng dng ca Trigger thng thng s dng : Tham chiu d liu trong bng ri rc Kim tra s khc nhau trc v sau khi cp nht d liu Kim tra li

SQL server 2000

6-18

Trigger vi gi tr t bng khc


CREATE Trigger trgSelect on TestView For Insert, Update AS if not exists(Select 'True',T.Price From Inserted I, Shippers T where T.Price > I.Price and I.TEstID = T.ShipperID) Begin raiserror('Kiem tra lai gia tri cua View',16,1) rollback tran END
SQL server 2000
6-19

S DNG IF UPDATE
Trong Update trigger, chng ta c th gii hn ct no c php cp nht. thc hin cng vic trn chng ta s dng hai hm: IF UPDATE

SQL server 2000

6-20

IF UPDATE
Ch c hiu lc trong Trigger. S dng hm ny vi mc ch chia ra nhng on m cho mi gi tr cp nht hoc ch c th cho php vi ct c kim tra bng hm UPDATE

SQL server 2000

6-21

Trigger for Update c s dng hm Update()


Create trigger trgUTestView on TestView for update As IF Update(Price) Begin If Exists(Select 'true' from Inserted I, shippers where I.Price < shippers.ShipperID) Begin Raiserror('Khong cap nhat hop le',16,1) Rollback Tran End End
SQL server 2000
6-22

Trigger for Update c s dng hm Update()


Trigger trn c ng dng cho vic Update Nu tn ti Price cp nht nh hn ShipperID nh nht.

SQL server 2000

6-23

You might also like