mysql高级 tigger触发器 --[3]
生活随笔
收集整理的這篇文章主要介紹了
mysql高级 tigger触发器 --[3]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
爆倉怎么辦:
用sql的判斷語句,就像某某語言一樣!
/* 之前一些語句:declare xx int/char。。 這個是聲明變量if xxx then xyxyend if; if語句 */create trigger t2 after insert on ordz for each row begin update goods set number = number-new.gid where gid = new.number; // new end $-- t2基礎上,完成much 和 num判斷delimiter $ create trigger t5 after insert on ordz for each row begin declare rnum int;# 判斷select number into rnum from goods where gid = new.gid;if new.much > rnum then set new.much = rnum;end if;update goods set number = number-new.much where gid = new.gid; end $# 報錯:ERROR 1362 (HY000): Updating of NEW row is not allowed in after trigger # 說是不能在語句after之后 在搞# 得在語句執行前面誒 before# 應該在生米煮成熟飯之前搞create trigger t5 before insert on ordz for each row begin declare rnum int;# 判斷select number into rnum from goods where gid = new.gid;if new.much > rnum then set new.much = rnum;end if;update goods set number = number-new.much where gid = new.gid; end $+-----+------+--------+ | gid | name | number | +-----+------+--------+ | 1 | cat | 20 | | 2 | dog | 20 | | 3 | pig | 20 | +-----+------+--------+insert into ordz values(5,3,50); # 50頭豬+-----+------+--------+ | gid | name | number | +-----+------+--------+ | 1 | cat | 20 | | 2 | dog | 20 | | 3 | pig | 0 | +-----+------+--------++-----+------+------+ | oid | gid | much | +-----+------+------+ | 5 | 3 | 20 | +-----+------+------+ 只是下了20頭豬, 沒有多余的啦~~~~
for each row 是什么?
行級觸發器?
語句級觸發器?
# 觸發器的 for each row 是什么? 觸發器分為:語句級觸發器, 和行級觸發器比如 create trigger tn after update on xxtable for each row begin sql N/ end$執行:update xx table set xx=xx where id > 100 那么:sqlN/ 被觸發幾次? 以為id > 100 被觸發 100 次 ------------------------------ delimiter $ create trigger t4 before update on ordz for each row begin insert into tmp values (5); end $## ERROR 1415 (0A000): Not allowed to return a result set from a trigger # 不允許 result 集合集create table tmp( id int )$select * from ordz $ +-----+------+------+ | oid | gid | much | +-----+------+------+ | 1 | 1 | 2 | | 3 | 2 | 2 | | 4 | 3 | 30 | | 5 | 3 | 20 | +-----+------+------+update ordz set much = 1 where oid = 5 $ mysql> select * from tmp$ +------+ | id | +------+ | 5 | +------+update ordz set much = 3 $ mysql> select * from tmp$ +------+ | id | +------+ | 5 | | 5 | | 5 | | 5 | | 5 | +------+ 影響多少行,每一行受影響, 觸發器就執行,所以叫行級觸發器! # 在oracle中如果不寫, 那么無論update語句影響多少行,都只執行一次 /*比如: 1個人下了訂單, 買了5件商品, insert 5 次,可以用行級觸發器,修改5次庫存用語句級來,insert一條發貨提醒但是 -- mysql 暫時不支持 語句級的觸發器for each row 是行級 ,mysql中必須有其他的數據庫,如果不寫,則默認為語句級的 */
總結
以上是生活随笔為你收集整理的mysql高级 tigger触发器 --[3]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装Sphinx
- 下一篇: mysqldump命令备份数据 mysq