mysql innodb中的外键引用

时间:2009-12-24 19:23:15

标签: sql mysql innodb calculated-columns

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

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

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

3 个答案:

答案 0 :(得分:5)

为什么不在需要值时计算?

答案 1 :(得分:1)

嗯,@ Lasse的建议更好,但是......还有另外两个另一个选项......

  1. MySql是否有触发器?如果是,那么您将在第一个表上添加一个Insert,Update,Delete触发器,每次从第一个表插入,更新或删除记录时,第二个表的CountNickNames属性都会更新(或插入或删除)第二个表的CountNickNames属性。

    在NickNameCountTable上创建触发器NickNameCountTrig   对于插入,更新,删除   如      更新nct Set         CountNickNames =              (从FirstTable中选择Count()               其中Name = nct.Name)      来自NickNameCountTable nct      名称的位置(选择插入的不同名称                     联盟                     选择已删除的不同名称)       - -----------------------------------------------      插入NickNameCountTable(Name,CountNickNames)      从FirstTable ft中选择名称,计数()      哪里不存在           (从NickNameCountTable中选择*            其中Name = ft.Name)       - ------这是可选的-----------------------      删除NickNameCountTable      其中CountNickNames = 0

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

答案 2 :(得分: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查询 - 值是按需计算的,而不是必须设置触发器。

了解更多info on views, see the documentation