MySQL数据库----触发器
生活随笔
收集整理的這篇文章主要介紹了
MySQL数据库----触发器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
觸發(fā)器-trigger
觸發(fā)器:監(jiān)視某種情況,并觸發(fā)某種操作。
使用觸發(fā)器可以定制用戶對表進(jìn)行【增、刪、改】操作時前后的行為,注意:沒有查詢
-- 觸發(fā)器:某種程序觸發(fā)了工具的運(yùn)行 -- 觸發(fā)器不能主動調(diào)用,只有觸發(fā)了某種行為才會調(diào)用觸發(fā)器的執(zhí)行 -- 插入一條記錄就觸發(fā)一次 -- 還是建議不要用觸發(fā)器,因?yàn)檫@是BDA管理的,還是不如你在程序里面直接寫比較方便1.創(chuàng)建觸發(fā)器的語法
createtrigger trigger_nametrigger_time trigger_eventon tbl_name for each rowtriggrr_body #主體,就是在觸發(fā)器里干什么事 trigger_time:{before | after} trigger_event:{insert | update |detele}準(zhǔn)備表
-- # 2.準(zhǔn)備表 -- #第一步:準(zhǔn)備表 create table cmd_log( id int primary key auto_increment, cmd_name char(64), #命令的名字 sub_time datetime, #提交時間 user_name char(32), #是哪個用戶過來執(zhí)行這個命令 is_success enum('yes','no') #命令是否執(zhí)行成功 );create table err_log( id int primary key auto_increment, cname char(64), #命令的名字 stime datetime #提交時間 );創(chuàng)建觸發(fā)器
-- #創(chuàng)建觸發(fā)器(向err_log表里插入最新的記錄) delimiter // createtrigger tri_after_inser_cmd_logafter inserton cmd_log for each row BEGINif new.is_success = 'no' theninsert into err_log(cname,stime) VALUES(new.cmd_name,new.sub_time);end if; #記得加分號,mysql一加分號代表結(jié)束,那么就得聲明一下 END // delimiter ; #還原的最原始的狀態(tài)-- #創(chuàng)建觸發(fā)器(向err_log表里插入最舊的記錄) delimiter // createtrigger tri_after_inser_cmd_log1after deleteon cmd_log for each row BEGINif old.is_success = 'no' theninsert into err_log(cname,stime) VALUES(old.cmd_name,old.sub_time);end if; #記得加分號,mysql一加分號代表結(jié)束,那么就得聲明一下 END // delimiter ; #還原的最原始的狀態(tài) DELETE from cmd_log where id=1;?
-- 觸發(fā)器的兩個關(guān)鍵字:new ,old -- new :表示新的記錄 -- old:表示舊的那條記錄 -- 什么情況下才往里面插記錄 -- 當(dāng)命令輸入錯誤的時候就把錯誤的記錄插入到err_log表中 1. 插入事件觸發(fā)器 INSERT INTO order_table(gid,much) VALUES(1,3);-- update goods set num = num -3 where id =1;CREATE TRIGGER tg1 AFTER INSERT on order_table for EACH row -- 固定寫法 BEGINupdate goods set num = num -new.much where id =new.gid; END-- 刪除觸發(fā)器 drop TRIGGER TG1;2.更新事件觸發(fā)器update order_table set much = much +2 where oid = 6;update goods set num = num+2 where id = 1;create TRIGGER tg2 AFTER UPDATE ON order_tablefor EACH ROWBEGINupdate goods set num = num+old.much - new.much where id = old.gid;END 3.刪除事件觸發(fā)器DELETE FROM order_table where oid =6;update goods set num = num + 3 where id = 1;create TRIGGER tg3 AFTER DELETE on order_tablefor EACH ROWBEGINupdate goods set num = num + old.much where id = old.gid;END 4.查看觸發(fā)器show tiggers;?
轉(zhuǎn)載于:https://www.cnblogs.com/TheLand/p/8486730.html
總結(jié)
以上是生活随笔為你收集整理的MySQL数据库----触发器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 之前是围棋下不过机器人,这回连打字也不行
- 下一篇: 下拉复选框