mysql触发器new old用法详解

您所在的位置:网站首页 old的比较级怎么写 mysql触发器new old用法详解

mysql触发器new old用法详解

2023-07-20 15:13| 来源: 网络整理| 查看: 265

mysql触发器new old用法详解

2018年07月05日 17:03:55

阅读数:42

 

1.当使用insert语句的时候,如果原表中没有数据的话,那么对于插入数据后表来说新插入的那条数据就是new,如图所示:

2.当使用delete语句的时候,删除的那一条数据相对于删除数据后表的数据来说就是od,如图所示:

3.当使用update语句的时候,当修改原表数据的时候相对于修改数据后表的数据来说原表中修改的那条数据就是old,而修改数据后表被修改的那条数据就是new,如图所示:

 

------------------------------------------------------------------------------------------------------ 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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3