我有一个包含多个字段的表单,每个字段都必须是唯一的。执行此查询的最佳方法是什么?
我应该打开一个连接和一个mySqlAdapter并执行:
myDataAdapter.Fill(myDataSet, "table");
每个值(每次更改sql查询)或者是否有更优化的方法来执行此操作
提前致谢
Doron Sinai
答案 0 :(得分:0)
听起来像是一个不寻常的要求。如果您可以详细说明具体细节,可以提出更好的解决方案。
鉴于您所说的内容,我了解您需要知道表单中任何输入字段的输入值是否已存在于“表格”中。
有两种选择:
1)询问数据库
像
这样的东西SELECT column1, column2 FROM table WHERE column1='value1' OR column2='value2'
如果你没有得到任何行,那么所有值都是唯一的(请注意,另一个应用程序用户可以在SELECT之后立即输入相同的值...如果你需要帮助那么处理那个是另一个问题的主题)。
如果确实返回了行,则返回行中的值将告诉您数据库中已存在的内容。
2)让数据库强制执行唯一性
在每列必须唯一的上创建唯一索引。请注意,在数据库上放置大量索引会显着降低插入和更新的性能并消耗磁盘空间。
请注意,选项1可能最终会变得太慢(取决于您的数据库大小和硬件),而不需要在您需要唯一的字段上添加索引。
答案 1 :(得分:0)
除了埃里克指出的选项之外,我还会提出另一种选择。您可以使用一个数据库调用加载所有现有值。出于性能原因,您可能希望将唯一值加载到HashSet中。然后,根据HashSet检查表单值,并确保HashSet中不存在这些值。
这就是事情。您需要考虑您在这里谈论的数据量。如果数据需要在整个数据库表中是唯一的,那么您可能希望选择Eric建议的唯一约束。通过使用上面提到的方法,或者通过构建Eric提到的可能性能很差的SQL查询,您不希望将来出现可伸缩性问题。
正确答案取决于您需要强制执行唯一性的数据结构和数量。