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

Sql 在另一个表中插入行时,如何自动增加一个表中的值,sql,postgresql,triggers,auto-increment,sql-view,Sql,Postgresql,Triggers,Auto Increment,Sql View,我目前有两个表: 表1具有唯一的ID和计数 表2有一些数据列和一列,其中表1的唯一ID值在其中 当我在表2中插入一行数据时,表1中引用的唯一id所在行的计数应增加。 希望我说清楚。一般来说,我对PostgreSQL和SQL都很陌生,因此我非常感谢您为我提供的帮助 您可以通过以下方式实现这一点。 如果需要,请确保适当地覆盖所有类型的写访问插入,更新,删除 还要注意,表2上的TRUNCATE或表1中的手动编辑可能会破坏数据完整性 我建议您考虑用一个替代的方法来返回聚合的结果,这些结果会自动更新。比如

我目前有两个表:

表1
具有唯一的ID和计数

表2
有一些数据列和一列,其中
表1
的唯一ID值在其中

当我在
表2中插入一行数据时,
表1中引用的唯一id所在行的计数应增加。

希望我说清楚。一般来说,我对PostgreSQL和SQL都很陌生,因此我非常感谢您为我提供的帮助

您可以通过以下方式实现这一点。
如果需要,请确保适当地覆盖所有类型的写访问<代码>插入
更新
删除

还要注意,表2上的
TRUNCATE
或表1中的手动编辑可能会破坏数据完整性

<>我建议您考虑用一个替代的方法来返回聚合的结果,这些结果会自动更新。比如:

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)
如果使用
左联接
,则会包括
tbl1
的所有行,即使
tbl2
中没有引用。使用常规的
联接
,这些行将从
视图中被忽略

对于表的全部或大部分,首先在子查询中聚合
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!
非常感谢欧文!(=