在另一个表中插入一行时如何自动增加一个表中的值

Posted

技术标签:

【中文标题】在另一个表中插入一行时如何自动增加一个表中的值【英文标题】:How to auto increment a value in one table when inserted a row in another table 【发布时间】:2013-08-16 05:51:17 【问题描述】:

我目前有两张桌子:

Table 1 具有唯一 ID 和计数。

Table 2 有一些数据列和一列,其中 Table 1 的唯一 ID 的值在里面。

当我在Table 2 中插入一行数据时,Table 1 中引用的唯一 id 行的计数应该增加。 希望我说清楚了。总的来说,我对 PostgreSQL 和 SQL 很陌生,所以如果能提供任何帮助,我将不胜感激。 =)

【问题讨论】:

【参考方案1】:

您可以通过 triggers 实现这一目标。 如果您这样做,请务必适当地涵盖所有类型的写访问。 INSERT, UPDATE, DELETE. 另请注意,Table 2 上的 TRUNCATETable 1 中的手动编辑可能会破坏数据完整性。

我建议您考虑使用VIEW 来返回自动更新的汇总结果。喜欢:

CREATE VIEW tbl1_plus_ct AS
SELECT t1.*, t2.ct
FROM   tbl1 t1
LEFT JOIN  (
   SELECT tbl1_id, count(*) AS ct
   FROM   tbl2
   GROUP  BY 1
   ) t2 USING (tbl1_id)

如果您使用LEFT JOIN,则包括tbl1 的所有行,即使tbl2 中没有引用。对于常规的JOIN,这些行将从VIEW 中省略。

对于表的全部或大部分,在子查询中首先聚合tbl2然后连接到tbl1,如上所示。

您也可以直接使用查询,而不是创建视图,如果您只获取一行或几行,这种替代形式的性能会更好:

SELECT t1.*, count(t2.tbl1_id) AS ct
FROM   tbl1 t1
LEFT   JOIN  tbl2 t2 USING (tbl1_id)
WHERE  t1.tbl1_id = 123  -- for example
GROUP  BY t1.tbl1_id     -- being the primary key of tbl1!

【讨论】:

非常感谢欧文! (=

以上是关于在另一个表中插入一行时如何自动增加一个表中的值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:根据在另一个表中给定条件的列中找到的值插入

插入行并增加字段中的值

向mysql表中的指定插入一行数据

PL/SQL 触发器插入下一个值

Yii2,如何将登录用户的用户名自动保存在另一个表中?

使用AngularJS单击添加按钮时如何在表中插入新数据行