开发者

Addition in MySQL trigger not working as expected

开发者 https://www.devze.com 2023-03-07 11:22 出处:网络
I\'m doing some addition as part of a mysql trigger. The added value is added a to a column on the table.The code is as follows;

I'm doing some addition as part of a mysql trigger. The added value is added a to a column on the table. The code is as follows;

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开发者_Go百科 = revenue+5, 1)
     ON DUPLICATE KEY UPDATE last_action_date = NOW(),
                             contract_type = new.Contract_Type,
                             revenue = revenue+5,
                             inc = 1;
  END IF;
END

The column revenue in the table crm_master is set to default of 0

The problem is that I'm getting unexpected results with incorrect values and in some cases 0 even though there should never be a 0 value.


I don't think it's valid reference to default value revenue = revenue+5 in your insert statement. It should look like

 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 .... 

Or you can simply do

INSERT INTO ....
VALUES 
   (new.msisdn,NOW(), 'INC5', new.Contract_Type, 5, 1) ...

*Your update part of INSERT ... ON DUPLICATE KEY UPDATE is ok.


INSERT INTO sometable( column ) VALUES ( column = column + 5 );

is equivalent to

INSERT INTO sometable( column ) VALUES ( 0 );

because (column = column+5) evaluates to 0 as column is never equal to column+5. This syntax is ok for UPDATE query, but for INSERT you should provide an explicit value, like

INSERT INTO sometable( id, column ) VALUES ( 1, 5 )
ON DUPLICATE KEY UPDATE column = column + 5;

which would insert value 5 if there is no row with given id and add 5 to column if there is one.

0

精彩评论

暂无评论...
验证码 换一张
取 消