当事情发生变化时更新mySQL表

时间:2010-07-21 22:37:23

标签: mysql triggers aggregate-functions

这可能是一个愚蠢的问题,但是可以在表中的字段中存储计数查询,这样当计数结果发生变化时,结果会自行更新吗?

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

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

SELECT COUNT(*),FROM SCHEMA.Message WHERE ThreadID ='SOMETHREADID'

但是,无论如何设置NumMessages字段,以便在每次添加和删除时都不会明确地进行更新吗?

由于 格雷姆

2 个答案:

答案 0 :(得分:4)

是的,您可以使用视图作为Thread表的实现。

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

答案 1 :(得分:1)

触发器!

你想要一个触发器。这应该可以帮助您进行搜索(知道要寻找什么是一半的战斗)。 http://www.databasedesign-resource.com/mysql-triggers.html

基本上,只要触发表上的指定事件(例如插入),就会触发触发器,并执行存储过程。

然后你的存储过程会检查以确保它关注的东西(你可以在这里添加各种逻辑),然后在MySQL执行首先触发它的原始查询之前做一些事情(增加那个值?)

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