我有一个包含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表列首先更新,因此下载表将不会更新。
是否可以将列计算结果分配给更新中的变量,然后在该过程中的另一个更新中使用该更新?
感谢。
答案 0 :(得分:0)
好的,看起来这样做的方法就是触发器。
让程序只更新Session表,然后对在实际更新之前运行的表进行触发,并更新第2和第3个表。