一:mysql 触发器update替代new用法详解

在mysql触发器中不可以直接使用update进行数据更新操作了,这个不是mysql bug而官方说可能使用了update会导致死循环了,推荐我们直接使用new赋值变量了.

mysql下insert和update触发器是不能再使用update和insert操作的,官方说明是为了防止出现死循环,解决的办法就是直接对new里的字段赋值,其实也挺方便的,不过也说明mysql的技术有待加强,毕竟人家mssql能够实现的功能,到你这就出问题了,代码如下:

DELIMITER $$   
USE `zn_home`$$   
DROP TRIGGER /*!50032 IF EXISTS */ `add_name`$$   
CREATE   
/*!50017 DEFINER = ‘test’@'%’ */   
    TRIGGER `add_name` BEFORE INSERT ON `uchome_sow`   
        FOR EACH ROW BEGIN   
        DECLARE _name CHAR(20);   
            SELECT `name` INTO _name FROM uchome_space WHERE uid=new.uid;  --www.xiariboke.com   
            SET new.name = _name;   
    END;   
$$   

看我们只要利用SET new.name = _name;就可以代替update了。

二:Oracle 触发器update替代new用法详解

当需要替换new里面的某个值时,跟MySQL其实很相似采用如下写法:

create or replace trigger TR_table_DATE_UPDATE
  before update
  on SECURITY_EMPLOYEE 
  for each row
declare
  -- local variables here
begin
  IF :new.APPLICATION_TIME is null THEN 
     :new.APPLICATION_TIME := sysdate;
  end if;
end TR_APPLICATION_DATE_UPDATE;

 

Logo

更多推荐