mysql高级 tigger触发器 --[3]
生活随笔
收集整理的這篇文章主要介紹了
mysql高级 tigger触发器 --[3]
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
爆倉怎么辦:
用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之后 在搞# 得在語句執(zhí)行前面誒 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 是什么?
行級觸發(fā)器?
語句級觸發(fā)器?
# 觸發(fā)器的 for each row 是什么? 觸發(fā)器分為:語句級觸發(fā)器, 和行級觸發(fā)器比如 create trigger tn after update on xxtable for each row begin sql N/ end$執(zhí)行:update xx table set xx=xx where id > 100 那么:sqlN/ 被觸發(fā)幾次? 以為id > 100 被觸發(fā) 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 | +------+ 影響多少行,每一行受影響, 觸發(fā)器就執(zhí)行,所以叫行級觸發(fā)器! # 在oracle中如果不寫, 那么無論update語句影響多少行,都只執(zhí)行一次 /*比如: 1個人下了訂單, 買了5件商品, insert 5 次,可以用行級觸發(fā)器,修改5次庫存用語句級來,insert一條發(fā)貨提醒但是 -- mysql 暫時不支持 語句級的觸發(fā)器for each row 是行級 ,mysql中必須有其他的數(shù)據(jù)庫,如果不寫,則默認為語句級的 */
總結
以上是生活随笔為你收集整理的mysql高级 tigger触发器 --[3]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装Sphinx
- 下一篇: 驱动力来自哪里——献给迷茫的程序员