Как заполнить значение столбца MySQL на основе формулы? - PullRequest
3 голосов
/ 03 июня 2011

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

Ответы [ 2 ]

7 голосов
/ 03 июня 2011

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

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;

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

1 голос
/ 03 июня 2011

Я думаю, для этого вам нужно использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...