3

モバイル デバイスでユーザー アカウントのデータベースをセットアップする方法について、助けが必要です。ログインと設定の2つのテーブルがあります。

ログインする

id         1
username   test
password   pass

設定

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

登録ページがあり、ユーザー名、パスワード、自動インクリメント プライマリ ID をログイン テーブルに挿入し、同じログイン ID、設定 1、設定 2、設定 3 を設定テーブルに挿入します。ログインIDを両方のテーブルに同時に挿入する方法について、クエリの例を誰か教えてください。現場の人々は通常、ユーザー アカウント データベースをどのようにセットアップしますか? 私は web-sql を使用しますが、任意の sql ドライバーまたは単純なグラフ/テキストを使用して答えることができます。

4

1 に答える 1

4

PostgreSQL 9.1 以降では、書き込み可能な 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;

これら 2 つのステートメントは同時に実行されます。正確には、クローズされます。

また、このコンストラクトは実際 idに保存された inを使用し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;
于 2012-08-20T23:51:01.360 に答える