Триггеры в MySQL

Это продолжение истории с проектированием базы данных.
Начало находится здесь: habrahabr.ru/qa/6019/
Решил для подсчета баланса определенного товара использовать триггеры.
Цель такая: после добавления в таблицу `variation` информации о продаже или о поступлении товара должен происходить пересчет баланса товара на определенной торговой точке. В таблице `balance` (к примеру после добавления новой торговой точки) может не быть записей, которые можно обновлять. Следовательно, нужно их добавить туда.
Написал следующий триггер:
BEGIN
  SET @item_id := NEW.item_id;
  SET @place_id := NEW.`place_id`;
  SET @item_count := NEW.`count`;
  IF (`balance`.`item_id` AND `balance`.place_id) = NULL THEN
    INSERT INTO `balance` (`item_id`,`place_id`,`count`) VALUES (@item_id,@place_id,@item_count);
  END IF;
  IF (`balance`.`item_id` AND `balance`.place_id) IS NOT NULL THEN
    UPDATE `balance` SET
    `balance`.`count`=`count` + @item_count
  WHERE `place_id` = @place_id AND `item_id` = @item_id;
  END IF;
END

При добавлении в таблицу `variation` строки, вываливается сообщение: Unknown table 'balance' in field list.
С чем это может быть связано, не пойму.
И можно ли как-то более изящно (и правильнее) сделать проверку наличия соответствующих строк в таблице `balance`?
  • Вопрос задан
  • 3931 просмотр
Решения вопроса 1
@camokatik
Думаю ругается на проверки
IF (`balance`.`item_id` AND `balance`.place_id) = NULL THEN
Попробуйте использовать INSERT… ON DUPLICATE KEY UPDATE, тогда IF не нужен.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@gkirok
а знак равно на IS не следует поменять? или такая задумка?

IF (`balance`.`item_id` AND `balance`.place_id) = NULL THEN
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы