MySQL как уменьшить значение на 1 с помощью триггера - PullRequest
0 голосов
/ 18 марта 2019

Я создаю простую базу данных инвентаризации и продаж магазина видеоигр с MySQL. На данный момент у меня есть инвентарная таблица:

game_id      count
1            5
2            2
3            1
4            7

и торговый стол

game_id      price     otherstuff 
3            xxx       xxxxx
2            xxxx      xxxxxxxx

Я хотел бы создать триггер, который проверяет, какой game_id добавляется в таблицу продаж. Затем уменьшает количество на -1 в таблице инвентаря. Я бы предположил, что это "После обновления".

CREATE DEFINER=`root`@`localhost` TRIGGER `sales_AFTER_INSERT` AFTER INSERT ON `sales` FOR EACH ROW BEGIN
update inventory set count = count-1 where game_id = game_id;
END

После тестирования этого скрипта он просто уменьшает каждый счет game_id на -1 каждый раз, когда я вставляю новые продажи.

Ответы [ 2 ]

1 голос
/ 18 марта 2019

У вас неверный game_id в вашем запросе.Если вы хотите получить game_id из модифицированной записи, вы должны использовать NEW.game_id

CREATE DEFINER =`root`@`localhost`
  TRIGGER `sales_AFTER_INSERT`
  AFTER INSERT
  ON `sales`
  FOR EACH ROW
BEGIN
  UPDATE inventory SET count = count - 1 WHERE game_id = NEW.game_id;
END
1 голос
/ 18 марта 2019

Вам нужно использовать NEW:

CREATE DEFINER=`root`@`localhost` 
   TRIGGER `sales_AFTER_INSERT` 
   AFTER INSERT ON `sales` FOR EACH ROW 
   BEGIN
        update inventory set count = count-1 where game_id = new.game_id;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...