0

简单地说:我有一个有 2 列的表:一个是用户名,另一个是昵称。我有另一个表,其中有 2 列:一个是用户名,另一个是 countNicknames。

我希望 countNicknames 包含每个用户拥有的昵称数量(并且每当我向 table1 插入新昵称时,table2.countNicknames 下的值都会自动更新。

你能写下如何构造第二个表来引用第一个表吗?

4

3 回答 3

5

为什么不只在需要价值的时候计算呢?

于 2009-12-24T19:26:07.853 回答
1

好吧,@Lasse 的建议更好,但是……还有另外两个选择……

  1. MySql 有触发器吗?如果是这样,那么您将在第一个表上添加一个插入、更新、删除触发器,该触发器在每次插入、更新或从第一个表中删除记录时更新(或根据需要插入或删除)第二个表的 CountNickNames 属性。 .

    在 NickNameCountTable 上创建触发器 NickNameCountTrig 用于插入、更新、删除作为更新 nct 设置 CountNickNames = (Select Count( ) From FirstTable Where Name = nct.Name) From NickNameCountTable nct Where Name In(从插入的联合中选择不同的名称 从已删除中选择不同的名称) - - - - - - - - - - - - - - - - - - - - - - - - - 插入NickNameCountTable (Name, CountNickNames)从 FirstTable ft Where Not Exists 中选择 name, count( ) (Select * From NickNameCountTable Where Name = ft.Name) -- ------ 这是可选的 --------- -------------- 删除 NickNameCountTable 其中 CountNickNames = 0

  2. MySql 是否有索引视图(或一些等价的)?显然不是 - 所以不要介意这个选项....

于 2009-12-24T19:47:21.400 回答
1

我希望 countNicknames 包含每个用户拥有的昵称数量(并且每当我向 table1 插入新昵称时,table2.countNicknames 下的值都会自动更新。

这实际上是视图将要做的事情。

CREATE OR REPLACE VIEW user_nickname_count AS
    SELECT t.username,
           COUNT(*) 'countNicknames'
      FROM TABLE t
  GROUP BY t.username

视图看起来像一张表,因此您可以根据需要加入它。唯一的开销是它实际上只是一个正在运行的 SELECT 查询——这些值是按需计算的,而不是必须设置触发器。

有关视图的更多信息,请参阅文档

于 2009-12-24T19:48:18.887 回答