在另一个表发生更改后,如何自动更新一个表?
说(请见下文)我有一张桌子countries
,还有一张桌子cities
。如何使在表中添加城市时cities
,total
表中的列自动更新(对应城市的增量)countries
?
有点儿 :
BEGIN; INSERT INTO cities VALUES ('Tokyo', 'Japan'); UPDATE countries SET total=1 WHERE name='Japan'; COMMIT;
,但是自动的,添加时执行 acountries.the_city.total++
cities.the_city
。
国家:
postgres=# SELECT * FROM countries;
name | total
-------+-------
USA | 0
Japan | 0
(2 rows)
城市:
postgres=# SELECT * FROM cities;
name | country
------+---------
(0 rows)
命令:
CREATE DATABASE geo;
\c geo;
CREATE TABLE countries (
name VARCHAR(15) PRIMARY KEY,
total int
);
CREATE TABLE cities (
name VARCHAR(15),
country VARCHAR(15),
FOREIGN KEY (country) REFERENCES countries(name)
);
语境:
标准 SQL 或 Postgres v16
冗余信息最好用触发器来维护。
您应该首先确保
total
具有合理的默认值:然后,维持计数的触发器可能如下所示:
这只是一个例子。还有改进的空间:例如,您可以跳过不修改国家/地区名称的更新处理。您可以添加其他触发器以使解决方案更加安全,例如添加一个触发器来阻止更新,
total
除非更新是由触发器调用的。