我正在做一些添加作为mysql触发器的一部分。添加的值将添加到表中的列。代码如下;
BEGIN
IF NEW.Status = 'processed' AND NEW.Success = 1 THEN
INSERT INTO crm_master
(msisdn, last_action_date, source, contract_type, revenue,inc)
VALUES
(new.msisdn,NOW(), 'INC5', new.Contract_Type, revenue = revenue+5, 1)
ON DUPLICATE KEY UPDATE last_action_date = NOW(),
contract_type = new.Contract_Type,
revenue = revenue+5,
inc = 1;
END IF;
END
表crm_master中的列收入设置为默认值0
问题在于我得到了意外的结果,错误的值,在某些情况下0,即使永远不会有0值。
答案 0 :(得分:0)
我不认为它是对insert语句中的默认值revenue = revenue+5
的有效引用。它应该看起来像
INSERT INTO crm_master
(msisdn, last_action_date, source, contract_type, revenue,inc)
VALUES
(new.msisdn,NOW(), 'INC5', new.Contract_Type, DEFAULT(revenue) +5, 1)
ON DUPLICATE KEY UPDATE ....
或者你可以简单地做
INSERT INTO ....
VALUES
(new.msisdn,NOW(), 'INC5', new.Contract_Type, 5, 1) ...
* INSERT ... ON DUPLICATE KEY UPDATE
的更新部分正常。
答案 1 :(得分:0)
INSERT INTO sometable( column ) VALUES ( column = column + 5 );
相当于
INSERT INTO sometable( column ) VALUES ( 0 );
因为(column = column + 5)的计算结果为0,因为列永远不会等于列+ 5。 此语法适用于UPDATE查询,但对于INSERT,您应提供显式值,如
INSERT INTO sometable( id, column ) VALUES ( 1, 5 )
ON DUPLICATE KEY UPDATE column = column + 5;
如果没有给定id的行,则会插入值5,如果有的话,则将5添加到列。