【问题标题】:Mysql triggers dont workMysql触发器不起作用
【发布时间】:2017-04-22 23:57:03
【问题描述】:

我一直在搜索有关 TRIGGERS 的信息,因为我迫切需要其中的一些,但无论我尝试多少次 Mysql workbench 6.3 CE 都不允许我创建它。我的服务器好像是 5.7,我已经阅读了手册以供参考,但我仍然无法使它们工作。

DELIMITER $$
CREATE TRIGGER updateproductostock
BEFORE INSERT ON producto
FOR EACH ROW
BEGIN
NEW.prod_points = prod_price / 2;
END$$
DELIMITER ;

我有一个名为 producto 的表,其中包含 id、描述、价格、库存和积分。我想要做的是让积分值成为价格值的一半。因此,如果产品的价格为 100 美元,那么积分值将是 50。

我无法创建触发器,mysql 给我语法错误。

我还想创建一个触发器,其中 producto 的库存值取决于表 orderOrder 有一个订单号、产品号、描述和数量。因此,当我插入新订单时,我希望 producto 中的库存值发生变化。如果 order 是使用相同的产品 ID 制作的,那么我希望将订单的数量添加到 product 的库存中。

再一次,mysql 给我语法错误。

我到处搜索并尝试了不同类型的语法,但我得到了错误。我的mysql确实有触发器的选项。

或者也许有更简单的方法来做我想做的事?请帮忙

【问题讨论】:

    标签: mysql triggers syntax-error


    【解决方案1】:

    对于您显示的 sql,我猜 prod_price / 2 应该是 NEW.prod_price / 2

    对于后一个问题,触发器需要在订单表上;但是,当它们应该很容易计算时,通常不赞成保持这些值,除非有紧迫的性能理由这样做。我对您的问题的猜测是您的订单表是用关键字命名的,而您忘记用`正确分隔它。

    【讨论】:

    • 它不受欢迎?那么有没有更好的方法呢?存储过程?
    • 令人不快的部分是首先存储此类聚合值。如果您运行的大型数据库需要对此类数据运行非常频繁的查询,并且正在妥善管理数据变得不一致的风险,这是一回事;但除此之外,为了避免编写这样的一些查询SELECT ..., SUM(c) FROM a JOIN b ON a.id = b.a_id GROUP BY ... ...但如果你要保持这样的值,触发器是可能是最可靠的方法之一(只要它们从未被禁用。)
    猜你喜欢
    • 2019-01-17
    • 2012-09-04
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2013-04-03
    • 1970-01-01
    相关资源
    最近更新 更多