2012-06-28 33 views
3

我是一個完整的SQL初學者,我正在努力尋找一個非常簡單的問題的解決方案。自動在另一個表中創建(並刪除條目)

情景是這樣的:當用戶在我的網站上註冊時,它們被插入只有少數列(user_id,用戶名,電子郵件,密碼,日期)的'用戶'表中。

我不想在註冊時詢問了他們的,但是我想,每個用戶都有一個可選的設置頁面,在這裏他們可以輸入額外的用戶信息,如用的名字,姓氏,生物等

爲了保持我的數據庫清潔,我爲此信息創建了第二個名爲'user_info'的表。此表格包含'用戶'中存在的'user_id'列。

我正在努力的是鏈接這兩個表。我需要它,所以無論何時將用戶添加到「用戶」表中,都會使用相同的「user_id」將新條目插入到'user_info'中。這也需要用於刪除用戶。

到目前爲止,我收集到使用FOREIGN KEY是必需的,並試圖使用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 
); 

我會在這個問題上欣賞任何意見,任何建議沿着一般的最佳實踐!

親切的問候

亞當

+0

外鍵+級聯需要InnoDB引擎,它們不能與MyISAM一起使用。 – biziclop

回答

0

我也只是一個初學者在SQL和我提供的解決方案可能不是最好的。你可以處理這個問題的方式有兩種

  • 找到最後插入的ID在你的用戶表,然後用所獲取的ID的USER_INFO插入一個空白記錄。

    因爲你的用戶ID是主鍵,簡單地做到這一點,每次當你插入:

SELECT MAX(USER_ID)FROM用戶

店所取得的結果在變量中,然後在user_info表中插入變量的值

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

  • 第二種方法是使用觸發器
在這個解決方案

,你可以做一個觸發器,每當一個新的ID被插入到用戶表,它會自動獲取最後生成的USER_ID和插入它進入Users_info表。

有關觸發器的更多信息,請參閱以下座標。

link1 link2

如果仍然遇到任何問題,那麼請回來後。

相關問題