mysql觸發器new old用法詳解

2021-08-21 05:56:20 字數 1795 閱讀 1899

1.當使用insert語句的時候,如果原表中沒有資料的話,那麼對於插入資料後表來說新插入的那條資料就是new,如圖所示:

2.當使用delete語句的時候,刪除的那一條資料相對於刪除資料後表的資料來說就是od,如圖所示:

3.當使用update語句的時候,當修改原表資料的時候相對於修改資料後表的資料來說原表中修改的那條資料就是old,而修改資料後表被修改的那條資料就是new,如圖所示:

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

觸發器學習筆記 new, old用法

觸發器學習筆記 new,old用法 觸發器是資料庫發生某個操作時自動執行的一類的程式 用於保持資料的完整性或記錄資料庫操作資訊方面 觸發器不能夠被直接呼叫,只能夠在某些事件發生時被觸發,也就是系統自動進行呼叫觸發器的構建語法 www.2cto.com create or replace trigge...

Oracle觸發器和new old特殊變數

new 為乙個引用最新的列值 old 為乙個引用以前的列值 這兩個變數只有在使用了關鍵字 for each row 時才存在.且update語句兩個都有,而insert只有 new delect 只有 old 系統中的觸發器例項 create or replace trigger jbpm.tib ...

Oracle觸發器和new old特殊變數

new 為乙個引用最新的列值 old 為乙個引用以前的列值 這兩個變數只有在使用了關鍵字 for each row 時才存在.且update語句兩個都有,而insert只有 new delect 只有 old 示例 create or replace trigger trigger cms zizh...