在 PostgreSQL 中,可以放在语句RETURNING
的末尾INSERT
以返回,例如,当该值由SERIAL
类型自动设置时,该行的主键值。
如何将此值存储在可用于将值插入其他表的变量中?请注意,我想将生成的插入id
到多个表中。据我了解,WITH
子句仅对单个插入有用。我认为这可能必须在 PHP 中完成。
这确实是糟糕设计的结果;没有自然键,除非您有主键句柄,否则很难获取唯一行;
在 PostgreSQL 中,可以放在语句RETURNING
的末尾INSERT
以返回,例如,当该值由SERIAL
类型自动设置时,该行的主键值。
如何将此值存储在可用于将值插入其他表的变量中?请注意,我想将生成的插入id
到多个表中。据我了解,WITH
子句仅对单个插入有用。我认为这可能必须在 PHP 中完成。
这确实是糟糕设计的结果;没有自然键,除非您有主键句柄,否则很难获取唯一行;
...可用于将值插入其他表?
您甚至可以使用数据修改 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<>fiddle here (Postgres 13)
旧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;