【问题标题】:Command FOR EACH ROW in mysqlmysql 中的 FOR EACH ROW 命令
【发布时间】:2018-10-04 15:20:58
【问题描述】:

请帮帮我。我想在 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. ps_stock_available 更新后创建触发器dis_out_of_stock

  2. 每一行

  3. 开始

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

  5. UPDATE ps_product_shop SET active=1 WHERE id_product IN (SELECT id_product FROM ps_stock_available WHERE quantity>0);

  6. 结束

谢谢,祝你有美好的一天。

【问题讨论】:

  • 每个BEGIN都需要END

标签: mysql sql prestashop-1.6


【解决方案1】:
  • 您需要将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 ;

【讨论】:

  • 非常感谢它的工作,但我有两个条件。一是禁用产品,二是启用产品。我想添加 AND 但不起作用...
  • @PavelMišík 你是什么意思?为什么它不工作?您收到任何错误吗?
  • @PavelMišík 好的,所以你想在数量为 0 时禁用 (active = 0),在数量 > 0 时启用 (active = 1)?
  • @PavelMišík 试试这个查询:UPDATE ps_product_shop AS pps JOIN ps_stock_available AS psa ON psa.id_product = pps.id_product SET pps.active = IF(psa.quantity = 0, 0, 1)
  • 不起作用....我在产品选项中将数量设置为 6,但系统未启用产品...
【解决方案2】:

您不应尝试更新整个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 ;

【讨论】:

  • 当我使用你的解决方案时,系统给我写了错误但没有描述,只有标题错误
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2021-12-17
  • 2022-12-27
相关资源
最近更新 更多