【发布时间】:2020-06-05 12:48:30
【问题描述】:
我有一个演示表
CREATE TABLE items (
id SERIAL primary key,
user_id integer,
name character varying,
created timestamp with time zone default now()
);
我希望运行单个查询并首先插入数据,然后使用返回的 id 返回主键,然后使用返回的 id 更新同一个表。
INSERT INTO items (name) values ('pen') RETURNING id as idd
update items set user_id=(select idd) where id=(select idd)
但上述命令不起作用并引发语法错误。 如有任何帮助,我们将不胜感激。
【问题讨论】:
-
为什么要更改主键?
-
我没有更改主键,我只是想插入我在 user_id 列中获得的主键。
-
如何向
items表添加一个触发器,将列user_id设置为生成的id值,而不是在插入后立即执行更新?无论如何,为什么要将ID两次存储在同一张表中?这不是和normalization 矛盾吗? -
有一个特定的要求,因为这并非在所有情况下都是如此。我正在数据库中创建某种树结构。与我的前辈讨论过触发器,但他们说这会不必要地复杂表和数据库结构
-
如果数据库触发器不是一个选项,那么执行 INSERT 和后续 UPDATE 的 PL/pgSQL 例程呢?或者这是否也会使结构变得不必要地复杂?
标签: postgresql sql-insert auto-increment