mysql触发器对列id等于最后插入的行id的列求和并存储
我有这样一个网站表:mysql触发器对列id等于最后插入的行id的列求和并存储,mysql,triggers,Mysql,Triggers,我有这样一个网站表: WEBSITE web ID | url | progress ------------------------------- 1 | example.com | 67 PROGRESS progress id | linking website id | amount to increase --------------------------------------------------- 1 | 1
WEBSITE
web ID | url | progress
-------------------------------
1 | example.com | 67
PROGRESS
progress id | linking website id | amount to increase
---------------------------------------------------
1 | 1 | 60
2 | 1 | 7
我有这样一个进度表:
WEBSITE
web ID | url | progress
-------------------------------
1 | example.com | 67
PROGRESS
progress id | linking website id | amount to increase
---------------------------------------------------
1 | 1 | 60
2 | 1 | 7
使用INSERT into将行插入进度时
我使用php和mysql从进度表中获取累积值,然后将新值存储到网站表中的进度值中
然而
我想知道我是否可以使用这些我听说过的触发器来自动汇总新的进度值并存储它
这可能吗?您可以使用触发器,但不需要;只要这样做:
update website set
progress = progress + ?
where web_id = ?
并从查询中获取值。这是可以保证工作的,因为更新是原子的(您不必担心其他进程同时插入/更新)您可以使用触发器,但不需要;只要这样做:
update website set
progress = progress + ?
where web_id = ?
并从查询中获取值。这是可以保证工作的,因为更新是原子的(您不必担心其他进程同时插入/更新)您实际上不需要使用触发器,您只需将进度添加到
网站中的现有行中
,但如果您想尝试触发器,您可以使用以下命令
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 ;
您还可以在手册页面的中找到有关触发器语法和使用的更多信息。您实际上不需要使用触发器,只需将进度添加到
网站的现有行中即可,但如果您想尝试使用触发器,可以使用以下方法
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 ;
您还可以在手册页的中找到有关触发器语法和使用的更多信息只是一个简短的说明-您在表架构中拼写了amount,应该只有一个m-这可能会为未来的开发人员提供一个很好的答案:)哈哈,我总是用2个m来拼写它。。。我从来没有真正意识到。。。干杯:)只是一个简短的提示-您在表架构中拼写了amount,应该只有一个m-这可能会为未来的开发人员提供一个很好的解决方案:)哈哈,我总是用2个m来拼写它。。。我从来没有真正意识到。。。干杯:)我现在意识到我不需要使用触发器!但是谢谢你提供的例子:)我现在意识到我不需要使用触发器!但感谢您提供的示例:)