怎么写这一个 mysql 的触发器,需求见正文,挺急得,谢谢!

2015-12-04 17:00:32 +08:00
 Ashitaka4

这个表的表名字是: HostGroups
需求是:当向 HostGroups 表中插入一条数据的时候,根据插入数据的 HostGroupFlag 的值找到和他相等的 HostGroupID 值,然后给找到的这条记录的 total 字段+1 ;

2709 次点击
所在节点    MySQL
12 条回复
Ashitaka4
2015-12-04 17:29:25 +08:00
逻辑有没有问题。
Ashitaka4
2015-12-04 17:48:31 +08:00
然而 18 分钟过去了。。。
chinajik
2015-12-04 17:56:23 +08:00
INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
Ashitaka4
2015-12-04 18:08:35 +08:00
@chinajik 谢谢回复,如果放在触发器中应该怎么写,况且插入的 values 会变的。
KIDJourney
2015-12-04 21:13:59 +08:00
KIDJourney
2015-12-04 21:15:11 +08:00
Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger.
msg7086
2015-12-04 22:01:48 +08:00
其实我觉得你问题没说清楚。
如果没有读过《提问的智慧》,请读一下。
本质上来说,你需要提供一个简单的表结构,一个插入语句,和你预期的行为方式。
Ashitaka4
2015-12-07 11:17:04 +08:00
@msg7086 多谢提醒,上次比较着急,而且对其需求也不甚清楚,特来补充。

一张有 4 个字段的表 HostGroups , NAME Varchar(10), HostGroupFlag INT , HostGroupID INT , Total INT 。

执行: insert into HostGroups values(shandong,11,12,13); commit ;

当插入执行后,将此条语句的 HostGroupFlag 字段也就是 12 这个值 和表中其他数据行的 HostGroupID 字段里值进行对比查找,如果一致, update 所找到的那条数据的 Total 字段值+1 。

不知道我这么表达您能不能明白,请教怎么实现这种需求。先谢谢了。
msg7086
2015-12-07 13:38:14 +08:00
@Ashitaka4 似乎是看明白了。
你的期望是跟着 insert 以后再做一次
update hostgroups set total = total + 1 where hostgroupid = 12 是吗?
Ashitaka4
2015-12-09 10:37:15 +08:00
@msg7086 对的 但还没有找到更好的方法,
KIDJourney
2015-12-10 19:03:35 +08:00
我回答你看不懂吗。。。
在 mysql 里面你不能这样做。。。
触发器不能修改正在被使用的表。。。

我还把文档发给你了,你都不看的吗。。。
KIDJourney
2015-12-10 21:25:26 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/241187

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX