1.創建觸發器的語句:
CREATE TRIGGER <觸發器名稱> <--
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON <表名稱>
FOR EACH ROW
<觸發器SQL語句>
-觸發器
代碼如下 復制代碼--create trigger 名字
--on 表名
--觸發動作
--for/after insert/update/delete
--as
--t-sql
select * from shop_jb
--insert into shop_xs values(6,4000,1,GETDATE(),3)
-- update shop_jb set stock=stock-1 where id=6
--創建觸發器
create trigger tri1
on shop5_xs
after insert
as
update shop3_jb set stock=stock-1 where id=6
---觸發器更新完之後,要查看表
create trigger tri3
on shop3_jb
for update
as
select * from shop3_jb
update shop3_jb set spec='sp-Z99' where id=2
drop trigger tri1
---用存儲過程來實現,更新完之後,要查看表
alter proc proc1
as
update shop3_jb set spec='sp-111' where id=2
select * from shop3_jb
exec proc1
---查看表的觸發器
exec sp_helptrigger 表名
---查看表的內容
exec sp_helptext 觸發器名
---刪除觸發器
drop trigger 觸發器名
提示:你必須擁有相當大的權限才能創建觸發器(CREATE TRIGGER),如果你已經是Root用戶,那麼就足夠了。這跟SQL的標准有所不同。
實例:
example1:
創建表tab1:
代碼如下 復制代碼DROP TABLE IF EXISTS tab1;
CREATE TABLE tab1(
tab1_id varchar(11)
);
創建表tab2:
DROP TABLE IF EXISTS tab2;
CREATE TABLE tab2(
tab2_id varchar(11)
);
創建觸發器:t_afterinsert_on_tab1
作用:增加tab1表記錄後自動將記錄增加到tab2表中
代碼如下 復制代碼
DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;
CREATE TRIGGER t_afterinsert_on_tab1
AFTER INSERT ON tab1
FOR EACH ROW
BEGIN
insert into tab2(tab2_id) values(new.tab1_id);
END;
測試一下:
代碼如下 復制代碼 INSERT INTO tab1(tab1_id) values('0001');看看結果估計兩個表都有相同數據!
----------練習--------
代碼如下 復制代碼create trigger tri1
on shop3_jb
after insert
as
select * from inserted
insert into shop3_jb values('洗衣機','aa',200,500,getdate())
select * from shop3_jb
exec sp_helptrigger shop3_jb
exec sp_helptext tri1
drop trigger tri1
create trigger tri2
on shop3_jb
after delete
as
select * from deleted
delete from shop3_jb where namel='筆記本'
select * from shop3_jb
---查看表的觸發器
exec sp_helptrigger 表名
---查看表的內容
exec sp_helptext 觸發器名
---刪除觸發器
drop trigger 觸發器名
select * from shop5_xs
select * from shop3_jb
補充語法
觸發器 語法
3.1 CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
trigger_time是觸發程序的動作時間。它可以是BEFORE或AFTERtrigger_event指明了激活觸發程序的語句的類型。trigger_event可以是下述值之一:
· INSERT:將新行插入表時激活觸發程序,例如,通過INSERT、LOAD DATA和REPLACE語句。
· UPDATE:更改某一行時激活觸發程序,例如,通過UPDATE語句。
· DELETE:從表中刪除某一行時激活觸發程序,例如,通過DELETE和REPLACE語句。
3.2 可能遇到的問題
如果你在觸發器裡面對剛剛插入的數據進行了 insert/update, 會造成循環的調用.
如:
create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END
應該使用set:
create trigger test before update on test for each row set NEW.updateTime = NOW(); END
3.3 觸發器 與存儲過程
觸發程序不能調用將數據返回客戶端的存儲程序,也不能使用采用CALL語句的動態SQL
(允許存儲程序通過參數將數據返回觸發程序)。
而存儲過程 可以接受參數,將結果范圍給應用程序