我是数据库概念的新手,目前正在学习如何设计数据库。我有一张下面列的表......
这是在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
我无法选择上述任何列作为主键,因为它们将来可能会更改。所以我创建了一个自动增量ID作为names_id。我还有一个GUI(一个JTable)显示这个表和用户更新结果,issues_id和基于Names.Names的注释这里是一个大文本列。我无法在GUI中显示names_id,因为它在GUI中没有任何意义。现在,当用户在为GUI2,3,4提供输入后更新数据库时,我使用下面的查询来更新数据库,我不能在where子句中使用names_id,因为Jtable的row_id与names_id不匹配,因为并非所有行被加载到JTable上。
update <tablename> set Result=<value>,issues_id=<value>,comments=<value>
where Names=<value>;
我可以更新数据库,但我想知道是否可以在不使用PK的情况下更新数据库。这有多高效?代理钥匙在这里服务的目的是什么?
答案 0 :(得分:1)
使用不引用主键的where
条件更新数据库是完全可以接受的。
但是,您可能希望了解索引和约束。如果多行具有相同的名称,则查询最终可能会更新多行。如果要确保它们是唯一的,则可以在列上创建唯一约束。
主键始终在该列上创建索引。该索引使访问速度更快。如果name
上没有索引,则更新将需要扫描整个表以查看所有名称。您可以通过在字段上构建索引来加快速度。