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

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

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

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

觸發(fā)器:

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

應(yīng)用場景:數(shù)據(jù)同步 例如:當(dāng)一個用戶完整信息保存在A/B/C三張表中,傳統(tǒng)方法維護用戶信息需要將對應(yī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)聽的目標(biāo)表)for each row(行級監(jiān)視,MySQL固定寫法,Oracle不同)begin sql語句集........(觸發(fā)器執(zhí)行動作,分號結(jié)尾)end;

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

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

new:代表目標(biāo)表目標(biāo)行發(fā)生改變之后的行 old:代表目標(biāo)表目標(biāo)行發(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表對應(yīng)的商品數(shù)量同步減少對應(yīng)的商品訂單出數(shù)量

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

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

分析:客戶刪除訂單,恢復(fù)商品表對應(yīng)商品的數(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

分析:客戶修改訂單,商品表對應(yīng)商品數(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

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

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

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

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


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凉城县| 镇安县| 二连浩特市| 长沙县| 高州市| 万荣县| 华坪县| 桂阳县| 福州市| 齐齐哈尔市| 寻乌县| 新密市| 勃利县| 循化| 本溪| 温州市| 淮北市| 米林县| 榆中县| 泸西县| 金沙县| 富源县| 罗田县| 苗栗市| 图们市| 兰西县| 五寨县| 镶黄旗| 鄱阳县| 南平市| 叶城县| 黑山县| 扬州市| 焦作市| 开封市| 南宫市| 普兰县| 江都市| 禄劝| 长白| 会泽县|