mysql中每行的命令

sq1bmfud  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(387)

请帮帮我,我想在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行“”附近要使用的正确语法
这是我的密码:
创建触发器 dis_out_of_stock 更新后 ps_stock_available 每行
开始
更新 ps_product_shop 设置active=0,其中id\u product in(选择id\u product from ps_stock_available 其中数量=0);
更新 ps_product_shop 设置active=1,其中id\u product in(选择id\u product from ps_stock_available 其中数量>0);
结束
谢谢,祝你今天愉快。

ktecyv1j

ktecyv1j1#

你需要重新定义 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 ;
vtwuwzda

vtwuwzda2#

您不应该尝试更新整个 ps_product_shop table。相反,只需查看刚刚修改的记录:

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 ;

相关问题