Добавление в триггер MySQL работает не так, как ожидалось

#mysql #sql #triggers

#mysql #sql #триггеры

Вопрос:

Я делаю некоторое добавление как часть триггера mysql. Добавленное значение добавляется a к столбцу в таблице. Код выглядит следующим образом;

 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
  

Для столбца revenue в таблице crm_master по умолчанию установлено значение 0

Проблема в том, что я получаю неожиданные результаты с неверными значениями, а в некоторых случаях 0, хотя значения 0 никогда не должно быть.

Комментарии:

1. Пример данных и, возможно, CREATE TABLE инструкция помогли бы.

2. Вы получаете неправильные результаты при вставке записи?

Ответ №1:

Я не думаю, что это допустимая ссылка на значение по умолчанию revenue = revenue 5 в вашем операторе insert. Это должно выглядеть следующим образом

  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 в порядке.

Ответ №2:

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

эквивалентно

 INSERT INTO sometable( column ) VALUES ( 0 );
  

поскольку (столбец = column 5) вычисляется равным 0, поскольку столбец никогда не равен столбцу 5.
Этот синтаксис подходит для запроса UPDATE, но для INSERT вы должны указать явное значение, например

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

который вставил бы значение 5, если нет строки с заданным идентификатором, и добавил бы 5 в столбец, если он есть.

Комментарии:

1. Спасибо за ваш вклад, и вы на 100% правы. Однако, поскольку вышеприведенный плакат предоставил практически тот же ответ и сделал это первым, я установил его ответ в качестве принятого ответа