Вычисляемая колонка (Generated Column) в mysql

611
07 августа 2017, 11:07

Есть таблица products. И там есть столбцы qty (количество), buy_price (цена покупки) и total (итог). Можно ли как то внутри MYSQL умножить поле qty на buy_price и вытащить ответ в поле total?
Структура таблицы:

CREATE TABLE `products` (
  `id` int(11) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `qty` varchar(50) DEFAULT NULL,
  `buy_price` decimal(25,2) DEFAULT NULL,
  `total` decimal(25,2) DEFAULT NULL,
  `sale_price` decimal(25,2) NOT NULL,
  `categorie_id` int(11) UNSIGNED NOT NULL,
  `media_id` int(11) DEFAULT '0',
  `date` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Тестовые данные:

INSERT INTO `products` (`id`, `name`, `qty`, `buy_price`, `sale_price`, `categorie_id`, `media_id`, `date`) VALUES
(2, 'Samsung', '10', '500.00', '510.00', 1, 0, '2017-07-31 15:31:48'),
(3, 'LG', '5', '250.00', '260.00', 2, 0, '2017-08-03 12:33:17');

Спасибо всем за ответы. Решил этот вопрос весьма банально (может даже и не корректно), сделал UPDATE как и подсказали

update products set total=qty*buy_price

А для остальных товаров сделал умножение прямо в PHP (не знаю насколько это правильно).

Всё же пришлось сделать через триггер как и подсказал Anatol.

Answer 1

Можно сделать (с пересозданием таблицы) так:

CREATE TABLE `products` (
  `id` int(11) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `qty` varchar(50) DEFAULT NULL,
  `buy_price` decimal(25,2) GENERATED ALWAYS AS (CAST(qty AS UNSIGNED) * buy_price),
  `total` decimal(25,2) DEFAULT NULL,
  `sale_price` decimal(25,2) NOT NULL,
  `categorie_id` int(11) UNSIGNED NOT NULL,
  `media_id` int(11) DEFAULT '0',
  `date` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;   

С пересозданием колонки так:

ALTER TABLE products ADD COLUMN total ddecimal(25,2) GENERATED ALWAYS AS (CAST(qty AS UNSIGNED) * buy_price);

Или триггером:

CREATE TRIGGER MyTriggerName
  BEFORE INSERT ON products
  FOR EACH ROW
    SET NEW.total = CAST(qty AS UNSIGNED) * buy_price;
READ ALSO
Генератор Java классов из базы данных Oracle

Генератор Java классов из базы данных Oracle

Есть веб-сервис на JavaЕсть БД Oracle

317
Android Studio - утеряны шаблоны Code Templates

Android Studio - утеряны шаблоны Code Templates

ЗдравствуйтеПодскажите пожалуйста у меня вот такая беда: Установил Android Studio, (при этом переустанавливал и раньше её) и при создании интерфейса...

520
Распознавание жестов android

Распознавание жестов android

Как сделать программу, которая будет распознавать жесты? Пример: я открываю браузер, рисую на экране букву "G" и он мне открывает гуглИли просто...

412