sql查询仅在非主要行的副本时才更新

时间:2014-01-23 17:36:49

标签: php mysql sql

我在php中有一个非常简单的SQL查询。在某人创建了用户名后,他们可以将其编辑为其他内容。

$uName_str = "UPDATE users SET users.username = '{$newUserName}' WHERE users.username = '{$oldUserName}';

但我不希望他们能够将用户名更新为与其他人相同的用户名。主键是userID。我可以运行一个单独的查询来查找所有用户名,然后将新选择的用户名与用户名数据库进行比较,但对一件事完全独立的查询似乎效率低下。有没有办法将其写为单个查询,以防止任何重复的条目?

4 个答案:

答案 0 :(得分:2)

在用户名栏上创建唯一索引。然后检查更新时的错误/异常。

答案 1 :(得分:1)

请添加username作为唯一索引。之后,如果有人试图复制该条目,您将收到MySQL错误:

ALTER TABLE `users` ADD UNIQUE(`username`);

答案 2 :(得分:-1)

所有你需要的:

ALTER TABLE users ADD UNIQUE INDEX(username);

$uName_str = "UPDATE IGNORE users SET users.username = '{$newUserName}' WHERE users.username = '{$oldUserName}';

答案 3 :(得分:-2)

运行简单查询以检查是否使用了用户名不会被视为效率低下。这将被视为最佳做法。您也可以制作存储过程。但这是一个更复杂的解决方案。我不推荐Rob的回答。因为它会在你的错误日志中填充异常,当你真正只是用户名时,你会相信它是错误的。