天天看點

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來定義, 如下:

set @t_id= new.ID;

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

end

如果是在删除之後要動手的,那就需要用OLD來定義了,如下:

其實這個很有意思,因為ID值其實已經被删除,卻還是可以用,實在是有點不太了解資料庫删除資料的真正機制。

set @t_id= old.ID;

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