萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> Mysql觸發器實例教程(創建 刪除 修改 查看)

Mysql觸發器實例教程(創建 刪除 修改 查看)

在學習mysql不久接觸到了mysql觸發器這個新功能了,以前在msssql有了解過但沒深入今天要用到mysql觸發器功能了,深入的整理了一些關於觸發器相關技術內容,希望對各位有幫助吧。

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

 (允許存儲程序通過參數將數據返回觸發程序)。
而存儲過程  可以接受參數,將結果范圍給應用程序

copyright © 萬盛學電腦網 all rights reserved