在MySQL中使用limit1

在MySQL中使用limit1,mysql,Mysql,在MySQL中,何时可以在查询末尾添加限制1。我通常在DELETE中添加它,但我看到它与INSERT甚至更新一起使用。这是一种过激的做法还是一种好的做法?如果你使用EXPLAIN,你会发现它加快了速度,因为一旦找到一个结果,它就会停止 它也是一种故障保护——如果您知道您插入的更新只会影响一行,那么通过指定它,您就可以保证它不会出错并弄乱多行。我想不出一个实例,在这种情况下,可以将加快查询速度并同时使其更安全的东西称为overkill。我将把我的投票放在“良好实践”专栏 INSERT INTO

在MySQL中,何时可以在查询末尾添加限制1。我通常在DELETE中添加它,但我看到它与INSERT甚至更新一起使用。这是一种过激的做法还是一种好的做法?

如果你使用EXPLAIN,你会发现它加快了速度,因为一旦找到一个结果,它就会停止


它也是一种故障保护——如果您知道您插入的更新只会影响一行,那么通过指定它,您就可以保证它不会出错并弄乱多行。

我想不出一个实例,在这种情况下,可以将加快查询速度并同时使其更安全的东西称为overkill。我将把我的投票放在“良好实践”专栏

 INSERT INTO .. VALUES () LIMIT 1
不存在。希望您知道您在其中输入了多少值

 INSERT INTO .. SELECT ... LIMIT 1
确实存在,而且非常有用,而且是离题的,因为限制在SELECT上

 DELETE ... LIMIT 1
 UPDATE ... LIMIT 1
很少有用。要么您对数据库足够了解,以确保您的WHERE匹配唯一条件,要么您不知道,在这种情况下,您应该多花一点时间查看数据库并学习SQL

但是

 UPDATE jobs SET owner=me WHERE owner IS NULL ORDER BY job_submit_time LIMIT 1
可以非常有用!这形成了一个近乎无锁的作业队列,在这里您可以从队列中获取作业,而无需等待、锁定或冲突解决。非常好

 DELETE FROM cache ORDER BY last_update_time LIMIT N
缓存占用太多空间?清除N个最早的行

很少有用。要么您对数据库足够了解,可以>确定您的WHERE匹配唯一条件,要么您不知道,在这种情况下,您>应该花更多的时间查看数据库并学习SQL


在某些情况下,限制1非常有用。例如,没有唯一键的表。如果我们有五个完全相同的密码,那么限制一个就可以了。

假设您正在编写忘记密码的代码(PHP):

如果您的软件是软件即服务(SaaS)

多个组织使用您的软件

帐户\u id
-
组织\u id
字段一起是唯一的id

账户id在代码中自动生成,如下所示:

琼斯0001
琼斯0002
琼斯0003

软件工程师忘记将
和organization_id='{$organization_id}'
添加到查询的
WHERE
条件中

在QA环境中测试忘记密码功能时,代码通过QA

然后代码被推送到生产现场


然后,
LIMIT 1
可以限制两个组织的用户共享同一帐户id时造成的损害。

今天不是,但我很确定,过去我通过这样做优化了复杂的查询。我知道帖子很旧,但rich提出了一个有效的观点——一旦达到限制,请求就会停止。同时,你也要确保只有有限的数字会受到影响。没有唯一键的桌子就是没有手术刀的外科医生。没有唯一键的表是excel电子表格,而且。。实际上,即使是excel电子表格也存储有行号。不要创建没有唯一键的表。至少添加一个自动增量。否则,您最终将返回并添加一个唯一的密钥,此时,您将不得不更新大量的应用程序代码。
UPDATE
    `users`
SET
    `pass` = PASSWORD('{$new_salted_pass}')
WHERE
    `account_id` = '{$account_id}'
LIMIT 1