【发布时间】:2015-04-21 17:55:56
【问题描述】:
我有一个连接到数据库的网站。在其中一张表中,一个不是主键的实体属性需要在该表中是唯一的。
目前,我在向该列插入值之前查询数据库以检查该值是否已存在。如果是这样,我的脚本会更改该值,然后再次开始相同的过程,直到没有返回结果,这意味着它在数据库中尚不存在。
虽然这可行,但我觉得它的性能消耗很大——即使值是唯一的,数据库也需要至少查询两次:一次用于检查,一次用于写入。
为了提高性能并让我的(可能有错误/不必要的)代码过时,我想将列标记为唯一键并使用 try/catch 块进行写入/错误处理过程。这样,数据库引擎需要处理唯一性,这似乎比我的查询写入过程更合理。
这是一个好主意还是唯一键不是为这种行为而设计的? SQL 数据库中唯一键的典型用例是什么?
【问题讨论】:
-
是的,这是个好主意。如您所描述的,一个典型的用例。
-
唯一键是一种将多列组合为一个的方法。如果只有一列,请改用唯一索引。
-
我没有必要将保留某种类型的结构与两个查询视为浪费。例如,如果第一个查询(或子查询)检索一个 MAX(列),然后您使用它来添加 1。在这种情况下,您将不会有超过 2 个查询。我想这取决于唯一列代表什么:整数、随机字符串或你有什么。
标签: php mysql database unique-key