php - 如何使用 PHP 确保 MySQL DB 表中值的唯一性 – 唯一键用例?

标签 php mysql database unique-key

我有一个连接到数据库的网站。在其一张表中,一个非主键的实体属性需要在该表中是唯一的。

目前,我正在查询数据库,然后将值插入该列以检查该值是否已存在。如果是这样,我的脚本会更改该值,并再次启动相同的过程,直到没有返回结果,这意味着数据库中尚不存在该值。

虽然这有效,但我觉得它对性能要求很高 - 即使值是唯一的,数据库也需要至少查询两次:一次用于检查,一次用于写入。

为了提高性能并使我的(可能有错误/不必要的)代码过时,我有想法将列标记为唯一键并使用 try/catch block 进行写入/错误处理过程。这样,数据库引擎需要处理唯一性,这似乎比我的查询写入过程更合理一些。

这是一个好主意还是唯一键不是为这种行为而设计的? SQL 数据库中唯一键的典型用例是什么?

最佳答案

INSERT INTO table (uniquerow) VALUES(1) ON DUPLICATE KEY UPDATE uniquerow = 1;

使用此语句,如果 key 唯一,则可以插入;如果 key 已存在,则可以更新。

通过唯一约束,您可以检查值的元组是否存在多次,而无需成为主键。

关于php - 如何使用 PHP 确保 MySQL DB 表中值的唯一性 – 唯一键用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29779738/

相关文章:

sqlite,当表达到最大记录数时触发

php - 只用正则表达式匹配罗马数字

PHP 表单更新页面

mysql - 将数字列表快速转换为 mysql IN 列表的最佳方法是什么?

database - NoSQL 值得使用

mysql - 选择帖子上的最新评论,没有评论字符串索引的关注者总数

php - 如何修复 C : mail() [function. 中的警告 : SMTP server response: 530 SMTP authentication is required. mail] :\xampp\htdocs\. 。第 22 行错误

php - 我可以在 PHP 中自动加载没有类的函数文件吗?

MySql 触发器问题变量未在命令字符串中引用