更新触发器上的Mysql更新

更新触发器上的Mysql更新,mysql,triggers,workbench,Mysql,Triggers,Workbench,我有一个非规范化的数据库,在这个数据库中,我将其他表的总分放入驱动程序表中。我想在更新点所在的表时更新表驱动程序的总点 大概是这样的: 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

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

大概是这样的:

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;
但是我不能在触发器内部更新。我也试过做手术,但我真的不知道怎么做


如何解决此问题?

如果“点数”表中有“numpoints”,则每次更新时,您可以通过触发器将增量添加到“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。无法更新存储函数/触发器中的表“drivers”,因为调用此存储函数/触发器的语句已使用该表。我想这是因为我不能更新一个更新触发器。通常情况下,这是可能的,只要它不是具有该触发器的同一个表。在这种情况下,“点”表上有触发器并更新“驱动程序”表。这是你试过的全部触发器吗?还有其他代码吗?现在可以正常工作了。我在开车的城市里搞砸了什么东西;这是我做不到的。非常感谢。