Mysql觸發器執行個體教程(建立 刪除 修改 查看)

來源:互聯網
上載者:User

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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.