日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql高级 tigger触发器 --[3]

發布時間:2023/12/14 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。