Добавление в MySQL триггер не работает, как ожидалось - PullRequest
1 голос
/ 22 мая 2011

Я делаю некоторые дополнения как часть триггера 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 голосов
/ 22 мая 2011
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, если нет строки с данным идентификатором, и добавил бы 5 к столбцу, если он есть.

0 голосов
/ 22 мая 2011

Я не думаю, что это допустимая ссылка на значение по умолчанию 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 в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...