mysql触发器_mysql触发器new old的实例详解

本文主要内容:

mysql触发器new old用法详解

mysql触发器new old:

"NEW . column_name"或者"OLD . column_name".

在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量("transition variables")。

对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及OLD同时使用。

一个UPDATE中同时使用NEW和OLD的例子。

复制代码 代码示例:

CREATE TRIGGER tr1

BEFORE UPDATE ON t22

FOR EACH ROW

BEGIN

SET @old = OLD.s1;

SET @new = NEW.s1;

END;

在触发器中,还要看触发器的时机,如果是插入前动手的,也可以写成set @t_time=NOW();t_time不需要预先定义,也不用NEW,或是OLD。

例子:

复制代码 代码示例:

begin

set @t_id= (select max(ID) from P_Booth);

set @t_name= 'P_Booth';

set @t_time=NOW();

INSERT INTO `L_InsertLogs` (`Counts`, `TablesName`,`OperateTime`) VALUES (@t_id,@t_name,@t_time);

end

如果是在更新之后要动手的,那需要用NEW来定义, 如下:

复制代码 代码示例:

begin

set @t_id= new.ID;

set @t_name= 'P_Booth';

set @t_time=NOW();

INSERT INTO `L_UpdateLogs` (`Counts`, `TablesName`,`OperateTime`) VALUES (@t_id,@t_name,@t_time);

end

如果是在删除之后要动手的,那就需要用OLD来定义了,如下:

因为ID值其实已经被删除,却还是可以用,实在是有点不太理解数据库删除数据的真正机制。

复制代码 代码示例:

begin

set @t_id= old.ID;

set @t_name= 'P_Booth';

set @t_time=NOW();

INSERT INTO `L_DeleteLogs` (`Counts`, `TablesName`,`OperateTime`) VALUES (@t_id,@t_name,@t_time);

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值