【发布时间】:2020-12-30 10:56:19
【问题描述】:
我有一个已经有一些特定列的填充表。我想通过添加一个新列来更改表结构,该列将表示一个字段,该字段是另一个表的行数。
是否可以通过触发器来实现它,以便在 alter 命令之后自动执行? 我想出了这样的东西,但显然没有更新专栏:
触发器的功能:
CREATE FUNCTION update_column() RETURNS TRIGGER AS
$BODY$
DECLARE
num INTEGER;
BEGIN
SELECT COUNT(*) INTO num FROM mytable1, mytable2 WHERE mytable1.field = mytable2.field GROUP BY mytable1.field;
UPDATE mytable1 SET new_column = num;
END;
$BODY$
LANGUAGE PLPGSQL;
触发器:
CREATE TRIGGER insert
AFTER UPDATE
ON mytable1
FOR EACH ROW
EXECUTE PROCEDURE update_column();
还有alter命令:
ALTER TABLE mytable1 ADD new_column INT;
【问题讨论】:
-
您确定您正在运行 MySQL 吗?这是 Postgres 语法。
-
@GMB 你是对的,我的错
-
这将非常低效。
new_column无论如何都不包含新信息,因此最好创建一个包含所有 mytable1 列以及select count子查询作为额外列的视图,而不是更改 mytable1 的结构。
标签: sql postgresql triggers sql-update alter-table