2010-07-21 89 views
2

这可能是一个愚蠢的问题,但是可以在表中的字段中存储计数查询,以便在计数结果发生更改时结果将自动更新?当某些东西发生变化时更新mySQL表

Thread(ThreadID,NumMessages) 
Message(MessageID,ThreadID,MessageText,PreviousMessage) 

我想在每次添加或删除具有相应ThreadID的消息时更新Thread.NumMessages字段。我知道我可以通过增加/使用数查询递减的Thread.NumMessages领域做到这一点

SELECT COUNT(*)FROM SCHEMA.Message WHERE线程ID =“SOMETHREADID”

但反正是有中设置NumMessages字段,这样可以保持最新状态,而不必在每次添加和删除时明确地完成它?

感谢 格雷姆

回答

1

触发器!

你想要一个触发器。这应该有助于你的搜索(知道要寻找的是战斗的一半)。 http://www.databasedesign-resource.com/mysql-triggers.html

基本上,任何时候触发一个触发器,触发一个表上的指定事件(如插入),并执行一个存储过程。你的存储过程然后会检查以确定它是关心的东西(你可以在这里添加各种逻辑),然后在MySQL执行第一个触发它的原始查询之前做一些事情(增加该值?)地点。

http://www.roseindia.net/mysql/mysql5/triggers.shtml

+0

在考虑触发器之前使用视图。 – 2010-07-21 22:56:01

+0

非常感谢:)我之前听过术语触发器,但从未使用过它们,它们正是我现在需要的:) – 2010-07-22 22:49:40

4

是的,你可以使用一个视图作为主题表执行。

http://dev.mysql.com/doc/refman/5.1/en/create-view.html

Create view thread_view 
    select 
     count(*) as NumMessages, 
     threadID 
     from message 
     group by threadID 
+0

+1:你打我给它 – 2010-07-21 22:56:30

+0

没关系你打我给它约3100其他时间:) – Zak 2010-07-21 22:58:10

+0

谢谢你们,但这一确切目的触发适合我更好,但我会花一些时间只要我有时间,尽快查看视图和触发器:) – 2010-07-22 22:47:21

相关问题