mysql触发器,OLD和NEW之间的文本

时间:2014-01-24 16:18:38

标签: mysql triggers

您好mysql触发器有问题:

DELIMITER $$
CREATE TRIGGER update_forum_admin 
    after UPDATE ON sb_admins
    FOR EACH ROW BEGIN

    INSERT INTO `mysql_db`.`trigger_log` (`dato`, `trigger`, `status`) VALUES (NOW(), 'update_forum_admin', OLD.user+"="+NEW.user);
END$$
DELIMITER ;

问题在于:

OLD.user+"="+NEW.user

这个结果只有0,但我想让它显示旧用户名加“=”加上新用户名。

但我需要什么声明呢?

2 个答案:

答案 0 :(得分:1)

您使用+作为字符串连接运算符,但这是Microsoft使用的非标准语法,而不是MySQL,也不是ANSI SQL标准。

MySQL使用函数CONCAT()。例如:

INSERT INTO `mysql_db`.`trigger_log` (`dato`, `trigger`, `status`) 
  VALUES (NOW(), 'update_forum_admin', CONCAT(OLD.user, '=', NEW.user));

ANSI SQL(以及大多数其他SQL数据库)使用双管作为字符串连接运算符:

INSERT INTO `mysql_db`.`trigger_log` (`dato`, `trigger`, `status`) 
  VALUES (NOW(), 'update_forum_admin', OLD.user || '=' || NEW.user);

但是,除非您将SQL mode设置为ANSIPIPES_AS_CONCAT,否则请勿在MySQL中尝试此操作。默认情况下,MySQL中的||是逻辑OR的同义词。

PS:You should use single-quotes for string literals

答案 1 :(得分:0)

您希望concatenate将这些值转换为字符串:

CONCAT(OLD.user, "=", NEW.user)