2011-05-22 106 views
1

我正在做一些额外的事情,作为mysql触发器的一部分。添加的值被添加到表格中的一列。代码如下:在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值。

+1

示例数据以及可能的'CREATE TABLE'语句将有所帮助。 – 2011-05-22 18:21:06

+0

当记录插入时,你会得到错误的结果吗? – a1ex07 2011-05-22 18:22:30

回答

0

我不认为它是有效的引用默认值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您的更新部分即可。

+0

谢谢,这是有道理的,并运作 – Michael 2011-05-23 06:31:26

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

相当于

INSERT INTO sometable(column) VALUES (0); 

因为(柱=柱+ 5)的计算结果为0作为列是从未等于柱+ 5。 这句法是确定的UPDATE查询,但对于INSERT,你应该提供一个明确的价值,像

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

这将插入值5,如果有没有带给定id行并添加5列(如果有)。

+0

感谢您的输入,你100%正确。然而,由于上面的海报提供了几乎相同的答案,所以首先我将他的回答设置为接受的答案 – Michael 2011-05-23 06:32:18