You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL技术问题:为何用RAND()随机复制表数据后顺序未改变?

解决MySQL中使用RAND()插入数据未打乱顺序的问题

最近我踩了个小坑:为了给动态内容滑块提供打乱后的数据源,我创建了一个和原表结构完全一致的新表,想把原表数据随机复制过去。

一开始我用了这条SQL语句:

INSERT INTO `new_table` (`id`, `value`) SELECT `id`, `value` FROM `original_table` ORDER BY RAND();

结果却傻眼了——新表的数据顺序和原表完全一模一样,RAND()函数根本没起到打乱的作用。

后来自己排查出了问题:我的实际需求只是打乱数据项(也就是value字段),但原语句里包含了id列。由于id通常是主键或者带有自增、有序特性,数据库在插入时会默认按id的顺序存储,直接覆盖了ORDER BY RAND()的效果。

修正后的正确语句很简单,只需要移除id列,只插入需要打乱的value字段:

INSERT INTO `new_table` (`value`) SELECT `value` FROM `original_table` ORDER BY RAND();

执行这条语句后,新表里的数据就完全随机打乱了,刚好满足动态滑块的需求。

把这个小失误记录下来,希望能帮到遇到同样问题的朋友~

内容的提问来源于stack exchange,提问作者user164863

火山引擎 最新活动