2013-03-05 22 views
1

我對數據庫概念非常陌生,目前正在學習如何設計數據庫。我有下面列的表...如何使用代理鍵執行更新查詢

這是在MySQL:

1. Names - text - unique but might change in future 
2. Result - varchar - not unique 
3. issues_id - int - not unique 
4. comments - text - not unique 
5. level - varchar - not unique 
6. functionality - varchar - not unique 

我不能選擇上述任何列作爲主鍵,因爲他們可能在將來改變。所以我創建了一個Auto-Increment id作爲names_id。我也有,顯示該表和用戶更新結果的GUI(一個JTable)的基礎上,Names.Names issues_id和意見在這裏是一個很大的文本列。我不能在GUI顯示names_id,因爲它不會使在GUI任何意義。現在當用戶在GUI中爲列2,3,4提供輸入後更新數據庫時,我使用下面的查詢來更新數據庫,因爲Jtable的row_id與names_id不匹配,所以我無法在where子句中使用names_id,因爲並非所有行被加載到JTable上。

update <tablename> set Result=<value>,issues_id=<value>,comments=<value> 
where Names=<value>; 

我能得到數據庫的更新,但我想知道,如果它確定,甚至沒有使用PK更新數據庫。這有多高效?代理鑰匙在這裏服務的目的是什麼?

+0

謝謝馬特,我會確保它在下一次以正確的格式。 – Raju 2013-03-05 14:46:45

回答

1

它是完全可以接受的更新使用條件where不引用主密鑰的數據庫。

您可能想了解索引和約束,雖然。如果多行具有相同的名稱,則查詢可能最終會更新多行。如果你想確保它們是唯一的,那麼你就可以創建在列的唯一約束。

主鍵總是在該列上創建索引。該索引使訪問更快。如果在name沒有索引,那麼更新將需要掃描整個表來看待所有的名字。您可以通過在該字段上構建索引來加快速度。

+0

謝謝戈登。我想知道如何使性能與使用PK相同。我得到了答案。 – Raju 2013-03-05 15:19:46

+0

@Raju。 。 。在這種情況下,建立一個索引會給你的表現。 – 2013-03-05 15:21:05