trigger
Mysql中触发器是一种与表操纵有关的数据库对象,当触发器地点表上涌现指定事宜时,将挪用该对象,即表的操纵事宜触宣布上的触发器的实行。
偶然在转变表的的某些数据,同时也愿望其他相干表中的数据也转变,应用触发器就能够满足如许的需求。应用触发器不公能够简化顺序,而且能够增添顺序的灵活性。
竖立触发器语法以下:
create trigger name(触发器称号) after/befor(触发时候) insert/update/delete(触发事宜,当填写个中一种,别的的操纵不会激活触发器) on (看管的表,即在哪张表上竖立触发器 ) for each row (行级触发器) begin (sql语句,愿望转变的数据,可写多条语句,每条语句必须用 ; 末端) end;
以上sql语句写上 ; 后就会实行,触发器未写完报错!
这时候就会用到 DELIMITER 敕令(delimiter 是定界符,分隔符的意义),它是一条敕令,不需要语句完毕标识,语法 为:
DELIMITER ;;(能够把mysql的完毕标识设为别的的标记,如 ;; 或 $ 还能够设为多个长度)
在这以后的语句,以分号完毕触发器不会有什么回响反映,只要遇到了 ;;,才认为是完毕语句。注重:运用完以后,要记得把它修正返来!
假定体系中有两个表:
商品表 goods(商品ID gid, 商品称号 goods_name,商品数目 goods_num)
定单表 ord(定单oid ,商品ID gid,定单数目 goods_much )
要竖立触发器来使商品表中的商品数目跟着定单表的定单数目自动更新,代码以下:
delmiter $ #推断库存是不是充足 create trigger t1 before insert on ord for each row begin #声明变量 declare goods_num int; select num into goods_num from goods where gid = new.gid; #推断 if new.much > goods_num then set new.much = goods_num; end if; update goods set num = num - new.much where gid=new.gid end$ delmiter ;
MySQL 中运用 declare 来定义一局部变量,该变量只能在 BEGIN … END 复合语句中运用,而且应当定义在复合语句的开首,
上述示例中运用了NEW关键字,和 MS SQL Server 中的 INSERTED 和 DELETED 相似,MySQL 中定义了 NEW 和 OLD,用来示意触发器的地点表中,触发了触发器的那一行数据。
细致地:
在 INSERT 型触发器中,NEW 用来示意将要(BEFORE)或已(AFTER)插进去的新数据;
在 UPDATE 型触发器中,OLD 用来示意将要或已被修正的原数据,NEW 用来示意将要或已修正为的新数据;
在 DELETE 型触发器中,OLD 用来示意将要或已被删除的原数据;
以上就是关于MySQL触发器的题目的细致内容,更多请关注ki4网别的相干文章!