2016-12-06 3 views
0

Я создал новый триггер в моей базе данных MySQL, чтобы обновить значение ячейки после вставки. Ячейку, которую я хочу обновить (gp_per) по умолчанию, присваивается значение null.MySQL Trigger не срабатывает ПОСЛЕ INSERT

Вот триггер:

SET @gp_per = ((@retail_price - (@retail_price * 0.23)) - @cost_price)/(@retail_price * 0.23) 

Он создал отлично и я не получил синтаксических ошибок, но когда я пытаюсь вставить новую строку, то gp_per клетка вниз, как NULL, а не обновление с правильным значением. Я раньше не использовал триггеры, поэтому я не уверен на 100%, что я делаю неправильно.

Ниже триггер:

enter image description here

И структура таблицы:

enter image description here

Спасибо за любую обратную связь!

+2

Что вы делаете, создает переменные сеанса, это не касается каких-либо значений столбцов. Как насчет того, чтобы вы сначала прочитали о триггерах, прежде чем обращаться за помощью? Их синтаксис тривиален, если вы знаете основные SQL-запросы, вы также можете обрабатывать триггеры. – Mjh

ответ

0

В документации MySQL на creating triggers говорит:

В теле триггера, вы можете ссылаться на столбцы в теме таблицы (таблицы, связанной с триггером), используя псевдонимы старого и нового. OLD.col_name ссылается на столбец существующей строки перед ее обновлением или удалением. Имя NEW.col_ ссылается на столбец новой строки, которую нужно вставить, или на существующую строку после ее обновления.

Тем не менее MySQL документации по trigger examples говорит:

В ПЕРЕД триггером, вы можете изменить его значение с помощью SET NEW.col_name = значение, если у вас есть UPDATE привилегии для него. Это означает, что вы можете использовать триггер для изменения значений, которые нужно вставить в новую строку или использовать для обновления строки. (Такое SET утверждение не имеет никакого эффекта в ПОСЛЕ триггера, так как изменение строки будет уже произошло.)

Вышеприведенные означает, что вы должны использовать

SET NEW.gp_per=((NEW.retail_price - (NEW.retail_price * 0.23)) - NEW.cost_price)/(NEW.retail_price * 0.23) 

выражение и вам нужно смените триггер на до Вставить триггер. Вы также можете использовать созданный столбец вместо триггера, если ваша версия MySQL поддерживает его.

Смежные вопросы