Команда ДЛЯ КАЖДОГО РЯДА в mysql - PullRequest
0 голосов
/ 04 октября 2018

Помогите мне, пожалуйста. Я хочу создать триггер на сервере MySQL, но сервер написал мне

Запрос SQL: Документация

CREATE TRIGGER `dis_out_of_stock` AFTER UPDATE ON `ps_stock_available`
FOR EACH ROW 
begin
UPDATE `ps_product_shop` SET active=0 WHERE id_product IN (SELECT 
id_product FROM `ps_stock_available` WHERE quantity=0);

MySQL сказал: Документация

1064 - у вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' в строке 4

Вот мой код:

  1. CREATE TRIGGERdis_out_of_stock ПОСЛЕ ОБНОВЛЕНИЯ ВКЛ. ps_stock_available

  2. ДЛЯ КАЖДОГО РЯДА

  3. начало

  4. ОБНОВЛЕНИЕps_product_shop SET active = 0 ГДЕ id_product IN (ВЫБЕРИТЕ id_product ОТ ps_stock_available ГДЕ количество = 0);

  5. ОБНОВЛЕНИЕ ps_product_shop SET active = 1 ГДЕ id_product IN (ВЫБЕРИТЕ id_product ОТps_stock_available ГДЕ количество> 0);

  6. конец

Спасибо и хорошего дня.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы не должны пытаться обновить всю таблицу ps_product_shop.Вместо этого просто посмотрите на запись, которая была только что изменена:

DELIMTER $$

CREATE TRIGGER `dis_out_of_stock` AFTER UPDATE ON `ps_stock_available`
FOR EACH ROW 
BEGIN
    UPDATE ps_product_shop ps 
        SET active = 0
        WHERE ps.id_product = new.id_product and new.quantity = 0;
END;

DELIMITER ;
0 голосов
/ 04 октября 2018
  • Вам нужно переопределить DELIMITER к чему-то другому, кроме ;, например: $$
  • Также проверьте, существует ли триггер или нет, используя DROP TRIGGER IF EXISTS.
  • В конце переопределите DELIMITER до ;

Попробуйте:

DELIMITER $$
DROP TRIGGER IF EXISTS dis_out_of_stock $$
CREATE TRIGGER dis_out_of_stock 
  AFTER UPDATE ON ps_stock_available 
    FOR EACH ROW begin 

      UPDATE ps_product_shop 
      SET active=0 
      WHERE id_product IN (SELECT id_product 
                           FROM ps_stock_available 
                           WHERE quantity = 0);
END $$
DELIMITER ;
...