将一个表的主ID插入另一个表

时间:2012-08-20 23:29:03

标签: mysql sql sqlite postgresql web-sql

我需要一些关于如何在移动设备上为用户帐户设置数据库的帮助。我有2个表:登录和设置。

登录

id         1
username   test
password   pass

设置

id(same key from login)  1
setting1                 0
setting2                 0
setting3                 0

我有一个注册页面,我想在登录表中插入用户名,密码和自动增量主ID,我想插入相同的登录ID,setting1,setting2,setting3进入设置表。任何人都可以提供一个示例查询,如何同时将登录ID插入两个表?该领域的人员通常如何设置用户帐户数据库?我将使用web-sql,但您可以使用任何sql驱动程序或只是简单的图表/文本来回答。

1 个答案:

答案 0 :(得分:4)

使用PostgreSQL 9.1或更高版本,您可以chain data-modifying statements together in a writeable CTE

WITH x AS (
    INSERT INTO login(id, username, password)
    VALUES (1, 'test', 'pass')
    RETURNING id
    )
INSERT INTO settings(id, setting1, setting2, setting3)
SELECT x.id,0,0,0
FROM   x;

这两个陈述是在同一时间执行的 - 或者说它是精确的。

此外,此构造使用id中保存的实际 login,如果触发器或规则否决了输入,则可能与您提交的内容不同。它还可以用于串行主键(这是一种非常常见的用例),可以在多个表中插入新行,而无需事先知道新的id。所以,没有额外的往返服务器。

如果您的表login已定义:

CREATE TEMP TABLE login(id serial, username text, password text);

这样可行:

WITH x AS (
    INSERT INTO login(username, password)
    VALUES ('test', 'pass')
    RETURNING id
    )
INSERT INTO settings(id, setting1, setting2, setting3)
SELECT x.id,0,0,0
FROM   x;