国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql 觸發(fā)器的詳細用法

2024-07-24 13:00:00
字體:
供稿:網(wǎng)友

觸發(fā)器:

一類特殊的數(shù)據(jù)庫程序,可以監(jiān)視某種數(shù)據(jù)的操作(insert/update/delete),并觸發(fā)相關(guān)的操作(insert/update/delete),保護數(shù)據(jù)的完整性

應用場景:數(shù)據(jù)同步 例如:當一個用戶完整信息保存在A/B/C三張表中,傳統(tǒng)方法維護用戶信息需要將對應的信息使用條SQL語句,依次插入,但是使用觸發(fā)器的方式的話,我們可以只用插入A表中一條數(shù)據(jù),就會自動觸發(fā)數(shù)據(jù)插入B/C表的操作,這樣就可以通過一個表的操作,同步其他操作,實現(xiàn)自動化維護數(shù)據(jù)的目的。

觸發(fā)器語法格式:

creat trigger 觸發(fā)器名稱after/before(觸發(fā)器工作的時機)update/delete/insert(觸發(fā)器監(jiān)聽事件)on 表名(觸發(fā)器監(jiān)聽的目標表)for each row(行級監(jiān)視,MySQL固定寫法,Oracle不同)begin sql語句集........(觸發(fā)器執(zhí)行動作,分號結(jié)尾)end;

刪除觸發(fā)器:drop trigger if exist 觸發(fā)器名稱 查詢數(shù)據(jù)庫觸發(fā)器:show triggers;

行變量:當目標表發(fā)生改變時候,變化的行可用行變量表示

new:代表目標表目標行發(fā)生改變之后的行 old:代表目標表目標行發(fā)生改變之前的行

觸發(fā)器案例:商品表/訂單表(商品數(shù)量控制) 這里寫圖片描述

這里寫圖片描述 觸發(fā)器監(jiān)聽:insert

create trigger tr1after insert on ordersfor each rowbeginupdate goods set godnum = godnum-new.godnum where id = new.id;end;

分析:orders表添加新的記錄之后,goods表對應的商品數(shù)量同步減少對應的商品訂單出數(shù)量

觸發(fā)器監(jiān)聽:delete

create trigger tr2after delete on ordersfor each rowbeginupdate goods set godnum= godnum+old.godnum where id = old.id;end

分析:客戶刪除訂單,恢復商品表對應商品的數(shù)量

觸發(fā)器監(jiān)聽:update

create trigger tr3after update on ordersfor each rowbeginupdate goods set godnum= godnum+(old.godnum-new.godnum) where id = old.id;end

分析:客戶修改訂單,商品表對應商品數(shù)量同步更新

觸發(fā)器聲明變量用法:

create trigger tr4before insert on ordersfor each rowbegin declare godSum int default 0; -- 定義觸發(fā)器變量 select godNum into godSum from goods where godId = new.godId; -- 變量賦值 if godSum< new.godNum then-- 觸發(fā)器控制邏輯 update goods set godNum = new.godNum where godId = new.godId; end if;end

分析:當客戶新建訂單超過商品表的商品數(shù)量則修改商品表,保商品表商品庫存量非負

mysql觸發(fā)器特別注意:

①:for each row:必須填寫,保證mysql支持行級控制,oracle同時支持行級控制和語句級控制

②:注意:如果在BEFORE或AFTER觸發(fā)程序的執(zhí)行過程中出現(xiàn)錯誤,將導致調(diào)用觸發(fā)程序的整個語句的失敗。對于事務(wù)性表,如果觸發(fā)程序失敗(以及由此導致的整個語句的失敗),該語句所執(zhí)行的所有更改將回滾。對于非事務(wù)性表,不能執(zhí)行這類回滾,因而,即使語句失敗,失敗之前所作的任何更改依然有效。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 湖口县| 东平县| 垣曲县| 棋牌| 赫章县| 孟州市| 洛川县| 诸暨市| 易门县| 平定县| 绥芬河市| 铜陵市| 吉首市| 文昌市| 巴南区| 汨罗市| 北安市| 措美县| 萨迦县| 讷河市| 平遥县| 乐昌市| 读书| 汝州市| 锦州市| 时尚| 丰镇市| 岳西县| 拉孜县| 连州市| 平昌县| 武陟县| 平阴县| 武隆县| 德州市| 淅川县| 秦安县| 宁陕县| 班玛县| 阿勒泰市| 黑龙江省|