3

私はSQLの完全な初心者であり、非常に単純な問題の解決策を見つけるのに苦労しています。

シナリオは次のとおりです。ユーザーが私のサイトに登録すると、数列(user_id、username、email、password、date)のみで「users」テーブルに挿入されます。

登録時にもう尋ねたくないのですが、各ユーザーに、名前、名前、略歴などの追加のユーザー情報を入力できるオプションの設定ページを用意してもらいたいと思います。

データベースをクリーンに保つために、この情報用に「user_info」という2番目のテーブルを作成しました。このテーブルには、「users」に存在する「user_id」列が含まれています。

私が苦労しているのは、これら2つのテーブルをリンクすることです。ユーザーが「users」テーブルに追加されるたびに、同じ「user_id」で「user_info」に新しいエントリが挿入されるようにしたいと思います。これは、ユーザーの削除にも機能する必要があります。

これまでのところ、外部キーの使用が必要であると収集し、これを解決するためにCASCADEを使用しようとしました。

私のテーブルは次のようになります。

CREATE TABLE users (
user_id INT AUTO_INCREMENT NOT NULL,
username VARCHAR(20) NOT NULL default '',
email VARCHAR(100) NOT NULL default '',  
password VARCHAR(100) NOT NULL default '',
create_date DATETIME NOT NULL default '0000-00-00',
PRIMARY KEY (user_id),
UNIQUE KEY (username),
UNIQUE KEY (email)
);

CREATE TABLE user_info (
    user_id INT NOT NULL,
    forename VARCHAR(30) NOT NULL default '',
    surname VARCHAR(30) NOT NULL default '',
    dob DATE NOT NULL default '0000-00-00',
    location VARCHAR(30) NOT NULL default '',
    PRIMARY KEY (user_id),
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ON UPDATE CASCADE
);

この問題に関するアドバイスと、一般的なベストプラクティスに関するアドバイスをいただければ幸いです。

敬具

アダム

4

2 に答える 2

1

Triggers(http://dev.mysql.com/doc/refman/5.0/en/triggers.html)を見てください。

于 2012-06-28T16:06:54.717 に答える
0

私もSQLの初心者であり、私が提供するソリューションは最善ではないかもしれません。この問題には2つの方法で対処できます

  • ユーザーテーブルで最後に挿入されたIDを検索し、フェッチされたIDを使用してuser_infoに空白のレコードを挿入します。

    ユーザーIDは主キーであるため、以下を挿入するたびにこれを実行するだけです。

SELECT max(USER_ID)FROMユーザー

フェッチされた結果を変数に格納してから、変数の値をuser_infoテーブルに挿入します

INSERT INTO user_info(user_id)VALUES('。$theValueInTHeVariable。');

  • 2番目の方法は、トリガーを使用することです

このソリューションでは、トリガーを作成して、新しいIDがusersテーブルに挿入されるたびに、最後に生成されたuser_idを自動的にフェッチし、それをUsers_infoテーブルに挿入することができます。

トリガーの詳細については、次の項目を参照してください。

link1 link2

それでも問題が解決しない場合は、投稿してください。

于 2012-06-29T10:39:37.953 に答える