MySQL中的添加触发器无法按预期工作

时间:2011-05-22 17:52:57

标签: mysql sql triggers

我正在做一些添加作为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值。

2 个答案:

答案 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添加到列。