SQL之觸發器

2021-04-15 23:46:06 字數 2632 閱讀 4831

/*觸發器是一種不帶引數特殊的儲存過程,有使用者定義,資料庫系統根據一定的條件自動執行*/

--sql觸發器大體上可以分為4種]

--insert 觸發器:在對錶進行資料錄入的時候觸發

--delete 觸發器:刪除表中的資料的時候觸發

--instead of 觸發器:此類觸發器建立在檢視之上,用來替代相應的動作,比如delete,insert,update

--觸發器的內部可以使用commit和rollback

create table emp

(eid int primary key,

ename varchar(10),

sal money

)create trigger in_tr

on emp for insert

asbegin

if (user='dbo')

begin

print 'dbo不能錄入資料'

rollback tran

endend

insert into emp values(1001,'rose',456)

--觸發器的觸發發生在事件發生之後

--在觸發器中新增臨時錶可記錄操作

--在連線符union的各語句只觸發一次

--採用union對資料庫的資源有利

--觸發器的主要功能:對歷史資料的審計

--語句級觸發器:每語句觸發;行級觸發器:每改變一行觸發

/*inserted邏輯表*/

/*作用:insert動作發生的時候,資料首先會被放入此表中接著等待使用者的命令,

如果使用者回退事務,則清空此表的內容,如果使用者提交事務,則把此表的資料永久寫入資料庫

*/--邏輯表的結構和觸發器表的結構完全相同,存在與記憶體中

select * into new from emp where 1>2

--觸發器中:

create trigger in_tr

on emp for insert

asbegin

if (user='dbo')

begin

print 'dbo不能錄入資料'

rollback tran

insert into new select * from inserted

endend

insert into emp values(1001,'rose',456)

--邏輯表的資料將錄入new

--用於記錄使用者插入影響的行數以及資料,是否用union都會記錄正確

--各種約束優先於觸發器

/*邏輯表deleted,當delete動作發生的時候,要刪除的資料首先會被放在deleted邏輯表中,

接著等待使用者提交或者回退的命令,如果使用者提交,則清空deleted邏輯表中的資料,如果

使用者回退,則把deleted邏輯表的資料放回原地,以保證資料的一致性

*/alter trigger del_tr

on emp for delete

asbegin

if (user='dbo')

begin

print 'dbo不能錄入資料'

rollback tran

endinsert into new select * from deleted

end

delete from emp

/*乙個表可以建立多個不同型別的觸發器,也可以建立多個同型別的觸發器,

但當乙個表上存在多個相同型別的觸發器的時候,觸發器的執行順序沒有定義*/

/*update動作發生的時候,將要被更新的資料(歷史資料)首先被放在inserted邏輯表中,

接著資料庫系統等待使用者提交或者回退的命令,如果使用者提交,則清空deleted邏輯表中

的資料,把inserted邏輯表中的資料放回原地,update涉及到兩張邏輯表

邏輯表的結構與觸發器的結構完全相同

*//*instead of 觸發器*/

create view v

as select * from emp

create trigger tr_v_insert

on v instead of insert

asbegin

print'錄入資料'

end--檢視上的此觸發器出發之後,基表上的觸發器不再執行

create trigger tr

on emp for insert

asbegin

print 'insert'

end在instead of觸發器中可以使用邏輯表

--示例

create table goods

(gid int primary key,

price money,

)create trigger tr

on goods for update

asbegin

if (update(gid))

begin

print'主鍵不能更新!'

rollback

endif (update(price))

begin

print'**可以更新'

commit

endend

update goods set gid=1001

SQL之trigger(觸發器)

先來看一小段程式 有如下三張表 帳戶 編號,姓名,餘額,建立日期,儲蓄所編號 儲蓄所 編號,名稱,位址,人數,所屬城市 借貸 帳戶,借貸型別,金額,日期 1 create trigger tri bank delete 2on bank for deleteas3 declare count acc...

sql 觸發器 直接遞迴觸發器

create trigger dbo loving20000 on dbo s for delete asdeclare age int select age sage from deleted delete s where sage age delete from s where sname xq...

sql 觸發器 儲存過程 觸發器(3 3)

1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...