MySQL触发器

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 用来代表即将或已经被删的原来数;

相关文章