首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的MySQL表中永久地洗牌id?

如何在我的MySQL表中永久地洗牌id?
EN

Stack Overflow用户
提问于 2016-04-05 05:54:31
回答 3查看 628关注 0票数 0

我有一个具有以下结构和许多行的简单表:

代码语言:javascript
复制
 id     | name    | title   |
------------------------------

需要用其他值替换id,换句话说,我需要永久地洗牌表。我需要运行什么查询?我只需要运行一次..。不管时间和记忆需要多长时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-05 06:25:18

考虑到您的行大小为800行,您可能会执行以下操作:

  • 使用表的所有记录创建一个临时表。 例如CREATE TABLE TMP_TABLE (SELECT * FROM YOUR_TABLE)
  • DROP TABLE YOUR_TABLE;
  • CREATE TABLE YOUR_TABLE (SELECT * FROM TMP_TABLE ORDER BY RAND() )
  • DROP TABLE TMP_TABLE;
票数 3
EN

Stack Overflow用户

发布于 2016-04-05 06:09:51

以下查询应执行以下操作:

  • 整个id集将是相同的,只是洗牌的id;
  • tbl是要更新的
  • tbl2tbl生成随机row_num
  • tbl3tbl3生成一个随机(不同于上面)的row_num
  • 使用tbl2.row_num1 = tbl3.row_num2,洗牌就完成了
代码语言:javascript
复制
UPDATE tbl INNER JOIN 
    (SELECT *, (@rm1 := @rm1 + 1) as row_num1 FROM tbl CROSS JOIN (SELECT @rn1 := 0) param ORDER BY RAND()) tbl2 
        ON tbl.id = tbl2.id
    INNER JOIN
    (SELECT *, (@rm2 := @rm2 + 1) as row_num2 FROM tbl CROSS JOIN (SELECT @rn2 := 0) param ORDER BY RAND()) tbl3
        ON tbl2.row_num1 = tbl3.row_num2
SET tbl.id = tbl3.id;
票数 2
EN

Stack Overflow用户

发布于 2016-04-05 09:41:34

您可以使用洗牌逻辑将数据库VIEW用于您的目的。

否则,使用另一个表备份当前表,然后SELECT对备份表中的行进行洗牌。然后对您的表进行TRUNCATE,然后从备份表的select查询中插入洗牌行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36418167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档