将数据插入到两个表中,将记录链接在一起
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 (...);
然后找到最后插入的id
:SELECT 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;
我正在尝试为用户创建记录。
这是两个表:
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 (...);
然后找到最后插入的id
:SELECT 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;