2013-03-05 53 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