
在mysql中,使用update join时,带有order by会导致mysql崩溃吗?
在mysql中,不能在带有join的update语句中使用order by。这会导致mysql内部错误,甚至导致mysql崩溃。
原因
当update语句中包含join时,mysql将执行以下操作:
order by子句用于对结果集进行排序。但是,在带有join的update语句中,order by无法保证哪个组将首先被更新。这可能会导致mysql内部错误或崩溃。
修复方法
为了修复此问题,必须使用子查询或临时表来对记录进行排序:
使用子查询:
update cfg_dev_network_push_status t1
set ...
where (t1.id, t1.push_status, t1.push_retry_times) in (
select id, push_status, push_retry_times
from (
select id, push_status, push_retry_times
from cfg_dev_network_push_status
join cfg_dev_network_bind_status on ...
order by push_status desc, push_retry_times desc, id asc
) as subquery
);使用临时表:
CREATE TEMPORARY TABLE tmp_sort AS
SELECT id, push_status, push_retry_times
FROM cfg_dev_network_push_status
JOIN cfg_dev_network_bind_status ON ...
ORDER BY push_status DESC, push_retry_times DESC, id ASC;
UPDATE cfg_dev_network_push_status t1
SET ...
WHERE (t1.id, t1.push_status, t1.push_retry_times) IN (
SELECT id, push_status, push_retry_times FROM tmp_sort
);以上就是在MySQL中,UPDATE JOIN语句可以包含ORDER BY吗?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号