mysql update触发旧的,新行的列日志

时间:2012-12-11 15:12:04

标签: mysql triggers

我的更新触发器

BEGIN
DECLARE s VARCHAR(100);
IF (OLD.authUId <> NEW.authUId) THEN SET s = CONCAT(s,'&authUId=', OLD.authUId); END IF;
IF (OLD.autPId <> NEW.autPId) THEN SET s = CONCAT(s,'&autPId=', OLD.autPId); END IF;
.....

INSERT INTO l_dblog(src,newId,oldValue) VALUE('auth_up',new.authId,s);
END

插入的行oldValue列总是为null插入,我的问题是什么?

我有删除触发器是成功的工作

我的删除触发器:

 BEGIN
      DECLARE s VARCHAR(60);
      SET s = CONCAT('&authUId=', OLD.authUId,'&autPId=', OLD.autPId,'&authTypeId=', OLD.authTypeId,'&authValue=', OLD.authValue);   
    INSERT INTO l_dblog(src,newId,oldValue) 
     VALUE('auth_del',OLD.authId,s);
    END

谢谢...

1 个答案:

答案 0 :(得分:0)

在更新查询中将变量s的默认值设置为空白,然后检查天气触发是否有效。如果不是在运行触发器后得到的错误。

BEGIN
DECLARE s VARCHAR(100) DEFAULT '';
IF (OLD.authUId <> NEW.authUId) THEN SET s = CONCAT(s,'&authUId=', OLD.authUId); END IF;
IF (OLD.autPId <> NEW.autPId) THEN SET s = CONCAT(s,'&autPId=', OLD.autPId); END IF;
.....

INSERT INTO l_dblog(src,newId,oldValue) VALUE('auth_up',new.authId,s);
END