mysql触发器new old的实例详解

发布时间:2020-07-06编辑:脚本学堂
本文介绍下,在mysql触发器中使用new old的例子,学习下mysql触发器中new old的用法,有兴趣的朋友作个参考。

本文主要内容:
mysql/chufaqi/ target=_blank class=infotextkey>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