SQL ServerMySQL触发器

trigger

Mysql中触发器是一种与表操作有关的数据库对象,当触发器所在表上出现钦赐事件时,将调用该指标,即表的操作事件触发表上的触发器的举行。

SQL Server,神跡在改变表的的一点数据,同时也冀望别的有关表中的数据也改成,利用触发器就能满意如此的急需。运用触发器不公可以简化程序,而且能够追加程序的百发百中。

创建触发器语法如下:

create trigger  name(触发器名称)

after/befor(触发时间)

insert/update/delete(触发事件,当填写在那之中1种,其余的操作不会激活触发器)

on (监视的表,即在哪张表上树立触发器
)

for each row (行级触发器)

begin

(sql语句,希望退换的数据,可写多条语句,每条语句必须用
; 结尾)

end;

如上sql语句写上 ;
后就会施行,触发器未写完报错!

此时就会用到 DELIMITE中华V 命令(delimiter
是定界符,分隔符的意趣),它是一条命令,不要求语句甘休标记,语法
为:

DELIMITETiggo;;(能够把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)或已经(AFTERAV四)插入的新数据;
在 UPDATE 型触发器中,OLD 用来表示就要或已经被修改的原数据,NEW
用来表示将要或曾经修改为的新数据;
在 DELETE 型触发器中,OLD 用来表示将要或已经被删去的原数据;

相关文章