как заполнить значение столбца mysql на основе формулы?

#mysql #formula #calculated-field

#mysql #формула #вычисляемое поле

Вопрос:

Я создал таблицу mysql со следующими столбцами…

 item_price, discount, delivery_charge, grand_total
  

Значения item_price , discount и delivery_charge все варьируются в зависимости от рассматриваемого элемента, и они будут заполнены в таблицу вручную.

Я хотел бы, чтобы mysql заполнял значение в grand_total столбце на основе значений item_price , discount и delivery_charge , используя приведенную ниже формулу…

 grand_total = item_price - discount   delivery_charge
  

Могу ли я каким-либо образом указать формулу для этого столбца при создании структуры таблицы в mysql? Я знаю, что это можно сделать с помощью php, но я предпочитаю, чтобы база данных делала это за меня автоматически, если это возможно.

Ответ №1:

Вот пример триггера, который будет работать. Обратите внимание, что вам понадобятся триггеры update и insert из-за ваших требований к «специальному обновлению».

 delimiter ~

create trigger my_table_update before update on my_table
for each row begin
    set new.grand_total = new.item_price - new.discount   new.delivery_charge;
end~

create trigger my_table_insert before insert on my_table
for each row begin
    set new.grand_total = new.item_price - new.discount   new.delivery_charge;
end~

delimiter ;
  

Но разве представление не было бы проще и лучше?

 create view my_table_view as
select item_price, discount, delivery_charge, 
item_price - discount   delivery_charge as grand_total
from my_table;
  

затем просто выберите из представления вместо таблицы

Ответ №2:

Я думаю, вам пришлось бы использовать BEFORE INSERT триггер для этого:

http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html

Что-то вроде этого (непроверенное в верхней части моего кода заголовка):

 CREATE TRIGGER blahblah BEFORE INSERT ON your_table
FOR EACH ROW BEGIN
    set new.grand_total = new.item_price - new.discount   new.delivery_charge;
END;