2013-04-24 63 views
0

我有一個數據庫有3個表,我正在更新第一個行,然後嘗試更新基於第二個和第三個表在第一個領域的變化。MySQL的過程 - 分配計算更新中的列更新到另一個更新中使用的變量

這裏是我目前:

--Session-- 
User Hotspot DownloadCounter 
bob 123  0    

--UserDownload-- 
User  Download 
bob  100 

--HotspotDownload-- 
Hotspot Download 
123  300 

目前,當我從熱點我用最新的業務計數器值的會話表的更新,但是我現在想更新UserDownload & HotspotDownload表與新的DownloadCounter的值 - 舊的DownloadCounter。

我想這是很容易通過以下步驟:

DECLARE increment INT; 

UPDATE Session 
    SET @increment = (200 - Counter), 
    Counter = 200 
    WHERE (User = 'bob' AND Circuit = '123'); 

UPDATE UserDownload 
    SET Total = (Total + @increment) 
    WHERE (User = 'bob'); 

UPDATE HotspotDownload 
    SET Total = (Total + @increment) 
    WHERE (Circuit = '123'); 

的想法是我更新會話表,計數器變化值賦值給一個變量,然後在下載表格的更新中使用。但'@'在過程中導致語法錯誤,沒有'@'它認爲增量是一列失敗。

如果在總表中沒有用戶/熱點的條目,我仍然需要更新會話表。

我試着用單個更新和左連接做這件事,但導致Sessions表列被首先更新,因此下載表不會被更新。

是否可以將列計算的結果分配給更新中的變量,然後在過程的另一個更新中使用該更新?

謝謝。

回答

0

好吧,看起來像這樣做的方式是觸發器。

讓程序只更新會話表,然後對實際更新之前運行的表進行觸發並更新第二個和第三個表。