#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
триггер для этого:
Что-то вроде этого (непроверенное в верхней части моего кода заголовка):
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;