我在mysql中做了一个触发器,但是由于某些原因,连接的结果总是零。我错过了什么?
BEGIN
IF NEW.weight < OLD.weight THEN
SET @description = CONCAT('You lost ', OLD.weight - NEW.weight, ' kgs');
ELSE
SET @description = CONCAT('You gained ', NEW.weight - OLD.weight, ' kgs');
END IF;
INSERT INTO History
VALUES (NEW.user_id, 'weight', @description, null);
END
1条答案
按热度按时间gblwokeq1#
不清楚你说的“永远是零”是什么意思?
CONCAT
应返回字符串值或null。根据提供的代码
CONCAT
表达式被分配给用户定义的变量@description
.我们注意到
INSERT
不指定要插入的列。您插入的值是否可能与表中的列没有“对齐”。指定列的名称,顺序与提供的值的顺序相对应
并确保插入字符串值的列是字符类型,而不是数字(mysql将静默地将字符串隐式转换为数字。。。作为行为的简单演示,请考虑:
如果这不是问题,那么。。。
如果你的意思是
NEW.weight - OLD.weight
计算结果为零,则每当NEW.
以及OLD.
价值观weight
我们是平等的。如果
weight
可以为null,请考虑检查其他条件,例如,使用mysqlCASE
语句(mysql存储程序中提供,不要与CASE
表达式。)对于调试,请考虑将这些值保存在用户定义的变量中(这样您就可以在触发触发器后从同一会话中查询变量)。
或者考虑将这些值添加到描述消息中,