2017-04-19 148 views
0

我有一個非規範化數據庫,其中有其他表的總點數到驅動程序表中。當我更新點的表格時,我想更新表格驅動程序的總點數。更新觸發器上的Mysql更新

事情是這樣的:

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; 

,但我不能觸發內部更新。我也嘗試過一個程序,但我真的不知道該怎麼做。

我該如何解決這個問題?

回答

0

如果'點數'在'點'表上可用,您可以通過觸發器將增量添加到每次更新中的「驅動程序」。但是,如果您要更改'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; 
+0

沒有用。 錯誤代碼:1442.無法更新存儲函數/觸發器中的表'驅動程序',因爲它已被調用此存儲函數/觸發器的語句使用。 我認爲這是因爲我無法更新UPDATE觸發器 –

+0

通常這是可能的,只要它不是具有觸發器的同一個表即可。在這種情況下,你在'點'表上觸發並更新'司機'表。這是你嘗試過的完整觸發器嗎?有沒有額外的代碼? – Aruna

+0

現在完美。我正在使用司機城市上漲一些東西;那是我不能做的事情。 謝謝。 –