mysql触发器来汇总列,其中列id等于最后插入的行id和存储

时间:2011-12-18 23:49:30

标签: mysql triggers

我有一个像这样的网站表:

WEBSITE
web ID | url         | progress
-------------------------------
1      | example.com | 67

我有一个像这样的PROGRESS表:

PROGRESS
progress id | linking website id | amount to increase
---------------------------------------------------
1           | 1                  | 60
2           | 1                  | 7

使用INSERT INTO将行插入PROGRESS时,

我使用php和mysql从PROGRESS表中获取累积值,然后将新值存储到WEBSITE表的进度值中。

...无论其

我想知道我是否可以使用这些触发器,我听说会自动总结新的进度值并存储它?

这可能吗?

2 个答案:

答案 0 :(得分:2)

你可以使用触发器,但你不需要;这样做:

update website set 
progress = progress + ?
where web_id = ?

从您的查询中获取值。这保证可行,因为更新是原子的(您不必担心其他进程同时插入/更新)

答案 1 :(得分:2)

您实际上不需要使用触发器,只需将进度添加到website中的现有行,但如果您想尝试触发器,则可以使用以下

delimiter $$

CREATE TRIGGER progress_update AFTER INSERT ON `progress`
  FOR EACH ROW BEGIN
    UPDATE `website` SET `progress` = `progress` + NEW.ammount_to_increase WHERE web_ID = NEW.linking_website_id;
  END;
$$

delimiter ;

您还可以在手册页12.1.11. CREATE TRIGGER Syntax

中找到有关触发器语法和使用的更多信息。