coolllyy 发表于 2023-3-21 19:16

mysql表的数据怎么打乱顺序?

有1万条数据是按插入顺序排列的 主键id从1开始自增 现在想打乱这个表的数据重新随机排序 这个有办法吗?
举个例子
1 张三 3岁
2 李四 2岁
3 王五 8岁
4 赵六 5岁


我想把这个表打乱成


1 李四 2岁
2 赵六 5岁
3 张三 3岁
4 王五 8岁


相当于主键还是按照1开始,后面的字段随机排列,这个mysql语句要怎么写,百度找了半天也没找到写法。

Klock0828 发表于 2023-3-21 19:17

本帖最后由 Klock0828 于 2023-3-21 19:19 编辑

你可以使用MySQL中的ORDER BY RAND()来对数据进行重新随机排序。SELECT * FROM table_name ORDER BY RAND();

980041382 发表于 2023-3-21 19:34

UPDATE my_table SET id = id + FLOOR(RAND() * 10000);
SELECT * FROM my_table ORDER BY RAND();

coolllyy 发表于 2023-3-21 19:37

我是要更新这个表,不用select语句查找,需要UPDATE,然后也是要从1开始排序,1-10000,中间不掉数字。

coolllyy 发表于 2023-3-21 19:40

980041382 发表于 2023-3-21 19:34
UPDATE my_table SET id = id + FLOOR(RAND() * 10000);
SELECT * FROM my_table O ...

感谢兄弟,你第一条语句,相当于id+(1至10000)数字,这样新表不是从1-10000 id了,我想要的是新表主键还是1-10000排序,只是内容随机掉了。

Thy 发表于 2023-3-21 19:46

建个相同结构的表,用select rand形式插进去,再rename不就行了

coolllyy 发表于 2023-3-21 19:47

Thy 发表于 2023-3-21 19:46
建个相同结构的表,用select rand形式插进去,再rename不就行了

insert into table2 select * from table1 order by rand();我用了这个语句打乱顺序了,但是id也是跟着后面的一起的,我不知道怎么再单独把id打乱。

coolllyy 发表于 2023-3-21 20:03

insert intotable2 (字段1, 字段2, ...)select(字段1, 字段2, ...)from table1 order by rand();只要不把id字段写进去就行了。。。。。原来这样就搞定。{:1_896:}

mainblog 发表于 2023-3-21 20:05

你可以使用MySQL的RAND()函数生成随机数,并在ORDER BY子句中使用它来打乱结果集中的行。以下是一个示例查询,可以将表中的行随机排序:

vbnet
Copy code
SELECT * FROM your_table_name ORDER BY RAND();
在这个查询中,your_table_name是要打乱的表名,RAND()函数用于生成随机数,ORDER BY子句按随机数排序。

如果你只想随机排序特定的列,可以将它们列出来并将它们包含在SELECT子句中,例如:

vbnet
Copy code
SELECT id, name, age FROM your_table_name ORDER BY RAND();
这将按照id的插入顺序打乱name和age列的值,但保留id的原始值不变。

Dolts 发表于 2023-3-21 20:09

我怎么感觉需要用存储过程才能实现你的功能。{:1_904:}
页: [1] 2
查看完整版本: mysql表的数据怎么打乱顺序?