MySQL过程 - 将更新中的列的计算分配给要在另一个更新中使用的变量

时间:2013-04-24 12:48:43

标签: mysql variables procedure assign

我有一个包含3个表的数据库,我在第一个表中更新了一行,然后尝试根据第一个表中字段的更改来更新第二个和第三个表。

以下是我目前的情况:

--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');   

我的想法是更新Session表并将计数器更改值分配给变量,然后在下载表的更新中使用该变量。但是'@'导致过程中出现语法错误,如果没有'@',它认为增量是一列,因此失败。

如果总表中没有用户/热点的条目,我仍然需要更新会话表。

我尝试使用单个更新和左连接执行此操作,但这导致Sessions表列首先更新,因此下载表将不会更新。

是否可以将列计算结果分配给更新中的变量,然后在该过程中的另一个更新中使用该更新?

感谢。

1 个答案:

答案 0 :(得分:0)

好的,看起来这样做的方法就是触发器。

让程序只更新Session表,然后对在实际更新之前运行的表进行触发,并更新第2和第3个表。