2012-03-06 80 views
0

我有一個表USERSuser_id作爲主鍵和user_nameSql簡單初學者操作

我有另一個表USERS_ACTuser_act_id主鍵,user_act_user_id和另外2列。

我需要user_act_user_id作爲外鍵USERS?我怎樣才能做到這一點?

這是我在SQL的第一天,所以請善待解釋我所問的是否是錯誤的。

+0

什麼你的數據庫引擎? – silly 2012-03-06 09:32:54

+0

mysql和我使用dbvisualizer來處理它。 – Fofole 2012-03-06 09:33:37

回答

1

讓我們假設你是不是DB管理員,你只是想獲得的所有活躍用戶的名字;))

select users.user_name 
from users 
join users_act on users.user_id = users_act.user_act_user_id 
+0

這實際上是我需要的。 – Fofole 2012-03-06 09:58:59

1

沒有參考性的完整性,它取決於你使它工作,它周圍沒有「魔法」。

使用來自USERS的pk值填充您的user_act_user_id,您就擁有了它。

您可能要添加約束,但可能不是你問什麼, http://msdn.microsoft.com/en-us/library/ms175464.aspx

總之,他們保持良好的狀態表之間的鍵。

+0

所以bassicaly我的user_act_user_id將有用戶的user_id值,所以這是我的FK? – Fofole 2012-03-06 09:41:27

+0

是的。你是老闆。 – Teson 2012-03-06 10:19:24

1

這取決於你的數據庫類型如果MySQL甚至支持外鍵。例如,您可以使用InnoDB格式的外鍵,但不能使用MyIsam格式的外鍵。 在使用MySql時,我個人更喜歡使用MyIsam,並在編程時做大部分關於完整性的檢查。 一般而言,您可以在表USERS中添加user_act_user_id,但不將其標記爲任何鍵。之後,您可以簡單地使用JOIN,但由於沒有給出參考完整性,所以如果您想要f.e.則必須在編程站點上編寫自己的「觸發器」。自動刪除屬於另一個表中用戶的數據。否則,你必須使用約束或觸發器,但是這在使用SQL開始時可能並不那麼容易。

+0

我當時正在接受一個「觸發器」作爲編程站點上的不在db數據庫上的檢查,如果這是被誤解的話。 – Chris 2012-03-06 09:51:17

+0

+1,試圖幫助 – Fofole 2012-03-06 09:59:29

+0

@Chriss:好的。不幸的是,我不能扭轉我的失望(除非你編輯你的答案)。儘管我仍然認爲應該始終在數據庫中檢查參照完整性。 – 2012-03-06 11:11:38

1

假設你正使用InnoDB(這是唯一支持外鍵的唯一引擎):

ALTER TABLE users_act 
    ADD CONSTRAINT fk_users_act_users 
     FOREIGN KEY (user_act_user_id) 
     REFERENCES users (user_id);