2013-01-24 44 views
1

假設我在MySQL數據庫中有一堆MyISAM表。我知道,如果我的表是InnoDB,MySQL Workbench會自動獲取表之間的關係。但是如果我的表是MyISAM,是否有一種方法可以選擇將哪個列用作MySQL Workbench中的外鍵,而無需MySQL Workbench在我的表模式中添加一列?舉例來說,假設我有一個表中這些列稱爲users手動選擇外鍵列mysql workbench

id    PRIMARY KEY 
username  VARCHAR (255) 
password  VARCHAR (255) 
email   VARCHAR (255) 
user_type_id INT 

正如你可以在上面看到,user_type_id將是一個外鍵從一個叫user_types表來。如果我在MySQL Workbench中的表usersuser_types之間添加了多對一關係,那麼user_types_id列將自動添加到我的表users的模式中(因爲這是MySQL Workbench通常認爲的外鍵)。我不希望發生這種情況,我希望能夠告訴MySQL Workbench使用列user_type_id作爲我的外鍵。任何方式我可以做到這一點?

謝謝

注:沒有當我雙擊一個表上的MySQL Workbench中的模型視圖,但是當我這樣做,我得到以下文本的外鍵選項卡:

注意:只能爲特定的存儲引擎(如InnoDB)定義外鍵。服務器接受其他存儲引擎的外鍵定義,但默默忽略它們。將您的表引擎切換到支持外鍵的位置,以便在此處進行調整。

回答

0

如果我正確理解你的問題,我相信你可以從表格本身的外鍵選項卡上做到這一點。如果您從模型概覽中雙擊一個表格,在底部的選項卡上有一個外鍵標籤。您可以手動添加外鍵,但是您可以從該對話框中進行選擇。那有意義嗎?

+0

我試過了,當我點擊我無法調整任何東西的外鍵時,我只是有一段文字說外鍵只能被定義爲像InnoDB這樣的特定存儲引擎。我會更新這個帖子,讓其他人不會提出同樣的問題 – user765368

+0

你有什麼理由使用MyISAM和InnoDB嗎?只是好奇,而我環顧四周。 – LNendza

+0

原因約束沒有直接在我的表中定義(因爲我使用的是框架,所以我讓框架處理表上的外鍵約束) – user765368

2

您可以暫時切換到InnoDB,定義關係並切換回MyISAM。關係將保持。但是,除了記錄你的意圖之外,他們沒有真正的用處。

如果這就是你想要的,那麼繼續。

順便說一句:FK標籤頁僅在Windows上不可用(對於不支持FK的引擎),因爲我們已經看到許多用戶爲MyISAM定義FK的抱怨,只是爲了看到它們的目標數據庫沒有效果。在Linux + OS X上,無論選擇哪種存儲引擎,都可以使用FK。