MySQL триггер при изменении значения поля - PullRequest
0 голосов
/ 30 января 2019

У меня есть 3 таблицы в базе данных:

  1. продукт

    CREATE TABLE `product` (
    `product_id` int(11) NOT NULL,
    `product_name` varchar(50) NOT NULL,
    `product_stock` int(11) NOT NULL,
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  2. транзакция

    CREATE TABLE `transaction` (
    `transaction_id` int(11) NOT NULL,
    `user_id` int(11) NOT NULL,
    `transaction_date` datetime NOT NULL,
    `transaction_status` ENUM('pending','process','cancel') NOT NULL DEFAULT 'pending'
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
  3. транзакция_детали

    CREATE TABLE `transaction_details` (
    `transaction_id` int(11) NOT NULL,
    `product_id` int(11) NOT NULL,
    `qty` int(11) NOT NULL,
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

, если для параметра транзакция_статус в таблице транзакций установлено значение "отмена", как обновить product_stock в таблице товаров на основе количества в таблице транзакции_деталей с помощью триггера

1 Ответ

0 голосов
/ 30 января 2019

Этот триггер должен делать то, что вы хотите.После UPDATE в transaction он обновляет запас всех продуктов в транзакции (используя JOIN s во всех трех таблицах, чтобы найти соответствующие продукты для транзакции):

CREATE TRIGGER update_stock 
AFTER UPDATE ON transaction
FOR EACH ROW
BEGIN
  IF NEW.transaction_status = 'cancel' THEN
    UPDATE transaction t
    JOIN transaction_details td ON td.transaction_id = NEW.transaction_id
    JOIN product p ON p.product_id = td.product_id
    SET p.product_stock = p.product_stock + td.qty;
  END IF;
END

Демо на dbfiddle

...