简单地说:我有一个有 2 列的表:一个是用户名,另一个是昵称。我有另一个表,其中有 2 列:一个是用户名,另一个是 countNicknames。
我希望 countNicknames 包含每个用户拥有的昵称数量(并且每当我向 table1 插入新昵称时,table2.countNicknames 下的值都会自动更新。
你能写下如何构造第二个表来引用第一个表吗?
简单地说:我有一个有 2 列的表:一个是用户名,另一个是昵称。我有另一个表,其中有 2 列:一个是用户名,另一个是 countNicknames。
我希望 countNicknames 包含每个用户拥有的昵称数量(并且每当我向 table1 插入新昵称时,table2.countNicknames 下的值都会自动更新。
你能写下如何构造第二个表来引用第一个表吗?
为什么不只在需要价值的时候计算呢?
好吧,@Lasse 的建议更好,但是……还有另外两个选择……
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
MySql 是否有索引视图(或一些等价的)?显然不是 - 所以不要介意这个选项....
我希望 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 查询——这些值是按需计算的,而不是必须设置触发器。
有关视图的更多信息,请参阅文档。