在PostgreSQL中,可以将RETURNING
放在INSERT
语句的末尾,以便返回行的主键值,当该值由SERIAL
类型自动设置时。
如何将此值存储在可用于将值插入其他表的变量中?请注意,我想将生成的id
插入到多个表中。据我所知,WITH
子句仅对单个插入有用。我认为这可能必须在PHP中完成。
这实际上是糟糕设计的结果;没有自然键,除非你在主键上有句柄,否则很难获取一个唯一的行;
...可用于将值插入其他表中?
您甚至可以使用data-modifying CTE在单个SQL语句中执行此操作:
WITH ins1 AS (
INSERT INTO tbl1(txt)
VALUES ('foo')
RETURNING tbl1_id
)
INSERT INTO tbl2(tbl1_id)
SELECT * FROM ins1
需要PostgreSQL 9.1或更高版本。
db <>小提琴here(Postgres 11) sqlfiddle(Postgres 9.6)
您还可以在单个查询中插入多个表:
WITH ins1 AS (
INSERT INTO tbl1(txt)
VALUES ('bar')
RETURNING tbl1_id
)
, ins2 AS (
INSERT INTO tbl2(tbl1_id)
SELECT tbl1_id FROM ins1
)
INSERT INTO tbl3(tbl1_id)
SELECT tbl1_id FROM ins1;