觸發器是乙個特殊的儲存過程,當對指定的表進行某種特定操作(如:insert,delete或update)時,觸發器產生作用。觸發器可以呼叫儲存過程。
觸發器的限制:
乙個表最多只能有三個觸發器,insert,update,delete
每個觸發器只能用於乙個表
不能對檢視、臨時表建立觸發器
truncate table能刪除表,但不能觸發觸發器
不能將觸發器用於系統表
常見的觸發器有三種:分別應用於insert,update,delete事件。
instead of 觸發器
建立乙個instead of 觸發器
if
exists
(select
*from sysobjects where name=
'trig_inser'
)--觸發器名稱
drop
trigger trig_inser
go create
trigger trig_inser on employee instead of
insert
asdeclare
@name nvarchar(50)
,@gender nvarchar(50)
declare
@salary
decimal(10
,2)select
@name
=name,
@gender
=gender,
@salary
=salary from inserted
if@gender
='男'
and@salary
<=
2300.00
--判斷條件
begin
print
'性別男的,工資需要大於2300'
endelse
begin
print
'進行新增'
insert employee(name,gender,salary)
values
(@name
,@gender
,@salary
)end
go
建立成功後可以在表的觸發器資料夾下找到你建立的觸發器。
sql語句執行後觸發 觸發器 進行判斷成立後進行新增操作,不成立提示錯誤資訊
sql語句執insert employee(name,gender,salary)
values
('lily12222111'
,'男'
如果條件成立則提示進行新增 ,建立成功
insert employee(name,gender,salary)
values
('王'
,'男'
after觸發器
if
exists
(select
*from sysobjects where name=
'trig_inser2'
)drop
trigger trig_inser2
go create
trigger trig_inser2 on employee after
insert
--和instead of 觸發器區別
asdeclare
@name nvarchar(50)
,@gender nvarchar(50)
declare
@salary
decimal(10
,2)select
@name
=name,
@gender
=gender,
@salary
=salary from inserted
if@gender
='男'
and@salary
<=
2300.00
begin
print
'性別男的,工資需要大於2300'
rollback
transaction
--回滾
endelse
begin
print
'進行新增'
endgo
after觸發器和instead of 觸發器 的區別在於執行的先後順序,after觸發器執行sql語句是先執行語句,後進行判斷,條件不成立時回滾語句,成立時進行儲存資料
insert employee(name,gender,salary)
values
('lily12222111'
,'男'
無引數儲存過程建立乙個無引數的儲存過程
if
exists
(select
*from sysobjects where name=
'proc_articlecomment'
)drop
procedure proc_articlecomment --儲存過程名稱
go --判斷是否存在如果存在刪除它
create
procedure proc_articlecomment
asselect commentid ,ar.articleid ,l.likeid ,l.createdate,contentdesc ,ar.createdate,c.customername,c.loginname,c.loginpassword,c.***,c.createdate
from articlecomment ar,articlelike l,customer c
where ar.articleid=l.articleid and ar.commentid=c.customerid
呼叫儲存過程
exec proc_articlecomment
方法簡單,成功後省略了連表查詢的繁瑣,簡單建立多次呼叫。
有引數的儲存過程
建立乙個有引數的儲存過程
if
exists
(select
*from sysobjects where name=
'proc_articlecomment2'
)drop
procedure proc_articlecomment2 --儲存過程名稱
go --判斷是否存在如果存在刪除它
create
procedure proc_articlecomment2(
@loginname nvarchar(50)
)asselect commentid ,ar.articleid ,l.likeid ,l.createdate,contentdesc ,ar.createdate,c.customername,c.loginname,c.loginpassword,c.***,c.createdate
from articlecomment ar,articlelike l,customer c
where ar.articleid=l.articleid and ar.commentid=c.customerid and c.loginname=
@loginname
go
呼叫儲存過程,呼叫時需要對你說明的變數進行傳參,多個引數用逗號隔開。
exec proc_articlecomment2 ' kenshincui'
面試複習 資料庫
1 資料庫的四個特性acid 原子性 atomicity 整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回滾 rollback 到事務開始前的狀態,就像這個事務從來沒有執行過一樣。一致性 correspondence 在事務開始之前和事務...
資料庫複習1
1.常用的資料庫軟體 a.大型資料庫 oracle oracle 甲骨文 公司 db2 ibm公司 sybase sybase公司 較早採用c s技術 b.中小型資料庫 sql server microsoft,支援c s結構,採用標準sql語言 mysql 體積小,速度快,開發原始碼,很多中小型 ...
資料庫面試1
1.mysql 有哪些儲存引擎,各自優缺點 mysql儲存引擎種類 了解 myisam innodb bdb memory merge example ndbcluster archive csv blackhole federated等。在oracle 和sql server等資料庫中只有一種儲存...