【问题标题】:mysql trigger, text between OLD and NEWmysql触发器,OLD和NEW之间的文本
【发布时间】:2014-02-15 17:27:50
【问题描述】:

您好,我的 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,但我想让它显示旧用户名加上“=”加上新用户名。

但是我需要什么声明呢?

【问题讨论】:

    标签: mysql triggers


    【解决方案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);
    

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

    PS:You should use single-quotes for string literals.

    【讨论】:

      【解决方案2】:

      你想把concatenate那些值变成一个字符串:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-21
        • 2021-04-27
        • 2011-06-01
        • 2018-12-19
        • 1970-01-01
        • 2018-11-30
        • 1970-01-01
        • 2020-11-10
        相关资源
        最近更新 更多