将数据插入到两个表中,将记录链接在一起

Insert data into two tables, linking the records together

我正在尝试为用户创建记录。

这是两个表:

CREATE TABLE users
(
  id bigserial NOT NULL,
  email character varying(254) NOT NULL,
  passhash character varying(255) NOT NULL,
  email_verified boolean,
  time_created integer,
  CONSTRAINT users_pkey PRIMARY KEY (id)
)

CREATE TABLE user_info
(
  id bigserial NOT NULL,
  user_id integer NOT NULL,
  first_name character varying(255),
  last_name character varying(255),
  CONSTRAINT user_info_pkey PRIMARY KEY (id)
)

基本上当一个新用户注册时,我需要添加一条用户记录和user_info。

通常我会 运行 所有的查询分开,像这样:

首先插入用户: INSERT INTO users (email, passhash, email_verified, time_created) VALUES (...); 然后找到最后插入的idSELECT id FROM users WHERE email = '$email' AND time_created = '$tm'; 然后使用我在上次查询中检索到的 id 插入到用户中:INSERT INTO user_info ...;'

我想知道这是否是一种可接受的方法,我知道一定有更好的方法。

您可以使用 returning 子句:

WITH u as (
      INSERT INTO users(email, passhash, email_verified, time_created)
          VALUES (...)
      RETURNING *
     )
INSERT INTO user_info(userId, . . . )
    SELECT u.id, . . .
    FROM u;