您好,登錄后才能下訂單哦!
監(jiān)聽數(shù)據(jù)的變化,以實(shí)現(xiàn)當(dāng)數(shù)據(jù)變化時(shí)的關(guān)聯(lián)操作,不過感覺沒有實(shí)際作用,觸發(fā)器的功能如果用代碼邏輯來控制感覺會更正規(guī)些,畢竟團(tuán)隊(duì)中的其它人不一定會看到你定義的觸發(fā)器,但一定能看到你的代碼。那為何還要學(xué)習(xí)觸發(fā)器,有些知識不是為自己學(xué)的,你不用,你不敢保證別人不用。如果別人用了,我們對此一無所知,那么會給程序的維護(hù)帶來很大的困難。
格式:create trigger 觸發(fā)器名稱 事件 on 表名 執(zhí)行代碼
delimeter $ // 修改語句結(jié)束符,避免和定義trigger中的語句沖突
create trigger triggerName
after/before insert/update/delete on 表名
for each row // 這一行是固定的
begin
sql語句 // 一條或多條sql語句,一條sql語句也可省略begin 和 end
end;
delimeter ; // 改回正常的結(jié)束符
如果在trigger內(nèi)部需要使用觸發(fā)trigger那行記錄中的值,那么new代表新行,old代表舊行。也就是說 old / new 分別代表事件發(fā)生 前 / 后該行記錄。是一整行,而不是某個(gè)字段。
*注意: insert 操作沒有old,delete 操作沒有new
drop trigger trigger_name
show triggers;
假設(shè)我們有一張班級表
id | class_name | num |
---|---|---|
1 | 001 | 1 |
2 | 002 | 1 |
3 | 003 | 0 |
還有一張學(xué)生表
id | name | class_id |
---|---|---|
1 | xiaohong | 1 |
2 | xiaogang | 2 |
我們定義一個(gè)觸發(fā)器,每當(dāng)增加一名學(xué)生,對應(yīng)班級表中的學(xué)生數(shù)量num就加一。
delimiter $$
create trigger zhaosheng after insert on student
for each row
begin
update class set num=num+1 where id=new.class_id;
end;
$$
delimiter ;
看效果:
當(dāng)增加一個(gè)學(xué)生zhangsan后,calss表中對應(yīng)的id為3的num自動增加1。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。