gpt4 book ai didi

mysql - 更新 order by 子句排序不同,然后选择 order by

转载 作者:行者123 更新时间:2023-11-30 00:06:10 28 4
gpt4 key购买 nike

我有一个带有 ORDER BY 子句的 UPDATE 查询。我已将相同的查询复制到具有相同 ORDER BY 子句的 SELECT 中,但得到了不同的结果。

更新查询:

UPDATE t_locks
SET server_guid = 11028790,
lock_time_to_live = TIMESTAMPADD(MINUTE,5,NOW())
WHERE
(server_guid IS NULL OR NOW() > lock_time_to_live OR lock_time_to_live IS NULL)
AND lock_key_id = 3
ORDER BY flag DESC, last_time_processed ASC
LIMIT 10;

选择查询:

SELECT * FROM t_locks
WHERE
(server_guid IS NULL OR NOW() > lock_time_to_live OR lock_time_to_live IS NULL)
AND lock_key_id = 3
ORDER BY flag DESC, last_time_processed ASC
LIMIT 10;

注意:我没有使用此 SELECT 检查 UPDATE 的结果。

怀疑:除了 SELECT 查询中的正常 ORDER BY 之外,它还添加了第三个参数,即 ID。我希望 UPDATE 能做同样的事情。

最佳答案

SQL 数据库不会向 order by 添加任何内容。 SQL 没有实现稳定的排序是有充分理由的。充分的理由是表代表无序集,因此没有排序顺序的基线。如果您按常量排序,则不能保证连续两次获得相同的顺序。领带可以以任何顺序出现。他们确实这么做了。

您刚刚了解到,您有基于 flaglast_time_processed 的重复项。从您的问题中不清楚您是否有 11 个或更多具有相同值的值,或者只有两个位于 select 的位置 10 和 11,但用于 update 的位置 11 和 10 >.

事实证明,SQL Server documentation比 MySQL 更好地解释了这一点(在分页的上下文中):

To achieve stable results between query requests . . . the following conditions must be met:

. . .

  1. The ORDER BY clause contains a column or combination of columns that are guaranteed to be unique.

关于mysql - 更新 order by 子句排序不同,然后选择 order by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24528672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com