【问题标题】:Mysql Update on Update trigger更新触发器上的 Mysql 更新
【发布时间】:2017-04-19 08:48:05
【问题描述】:

我有一个非规范化数据库,其中我将其他表的总点数放入驱动程序表中。我想在更新积分所在的表格时更新表格驱动的总积分。

类似这样的:

CREATE TRIGGER sanciones_trigger BEFORE UPDATE ON points
FOR EACH ROW
UPDATE drivers,
    (  SELECT pID,SUM(numpoints) AS total_points
        FROM drivers
        INNER JOIN points ON points.driverID = drivers.pID
        GROUP BY drivers.pID
    ) sum
SET drivers.total_points= sum.total_points
    WHERE drivers.pID = sum.pID;

但我无法在触发器内更新。我也尝试了一个程序,但我真的不知道该怎么做。

我该如何解决这个问题?

【问题讨论】:

    标签: mysql triggers workbench


    【解决方案1】:

    如果 'points' 表中的 'numpoints' 可用,您可以在每次更新时通过触发器将 delta 添加到 'drivers' 中。但是,如果您还要更改“driverID”,这将不起作用。请尝试以下方法。

    这里的“NEW”关键字为您提供要更改为的新值,“OLD”关键字为您提供表中存在的值。

    CREATE TRIGGER sanciones_trigger BEFORE UPDATE ON points
    FOR EACH ROW
    UPDATE drivers
    SET total_points= drivers.total_points + (NEW.numpoints - OLD.numpoints)
        WHERE pID = NEW.driverID;
    

    【讨论】:

    • 不起作用。错误代码:1442。无法更新存储函数/触发器中的表“驱动程序”,因为它已被调用此存储函数/触发器的语句使用。我认为这是因为我无法在 UPDATE 触发器上进行 UPDATE
    • 通常这是可能的,只要它不是具有触发器的同一个表。在这种情况下,您可以在“点”表上触发并更新“驱动程序”表。这是您尝试过的完整触发器吗?有没有额外的代码?
    • 现在完美运行。我正在使用司机城市更新一些东西;那是我不能做的事情。谢谢。
    猜你喜欢
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多