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

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

但是我需要什么声明呢?

最佳答案

您正在使用 + 作为字符串连接运算符,但这是 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 modeANSIPIPES_AS_CONCAT。默认情况下,MySQL 中的 || 是逻辑 OR 的同义词。

附言:You should use single-quotes for string literals .

关于mysql触发器,OLD和NEW之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21337424/

相关文章:

java - Websocket服务器检测数据库中的数据变化

mysql - 在 CentOS 6.9 上安装 MySQL 5.1

mysql - 如何从 BEFORE UPDATE 触发器内的同一个表中检索计数

mysql - 通过从之前的行中减去来触发

triggers - mysqldump 触发器分隔符语法

mysql - 如何选择与所有必需标签匹配的帖子?

mysql - SQL 查询从表中检索下一个可用 ID

mysql - 如何通过命名或存储表达式来防止 SELECT MySQL 查询中的表达式重复?

mysql - MySQL 中是否有一个函数不允许在已经从数据库中的 ENUM 数据类型中选择一个值之后直接选择一个值?

postgresql - 错误 : record "old" is not assigned yet