首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用许多随机数填充MySQL表?

如何用许多随机数填充MySQL表?
EN

Stack Overflow用户
提问于 2012-06-15 07:04:35
回答 5查看 51.4K关注 0票数 28

我将问一个已经在very抽象terms中提出的问题,但(可以理解)没有提供具体的答案:

在MySQL提示符下,如何创建和填充表rand_numbers,该表包含一列number INT和1111行,其中number列包含一个介于2222和5555之间的随机数?

类似于:

CREATE TABLE rand_numbers(number INT);

 #run following line 1111 times
INSERT INTO rand_numbers (number) VALUES (2222 + CEIL( RAND() * 3333));

这个问题已经被问过了,但是要么是relies上的external语言循环,要么是far too general。我想知道是否有可能在典型的Linux MySQL提示符下做这么简单的事情。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-15 07:13:11

要创建表,请使用以下命令:

CREATE TABLE rand_numbers (
    number INT NOT NULL
) ENGINE = MYISAM;

然后,要用随机值填充它,您可以定义一个stored procedure (它支持循环):

DELIMITER $$
CREATE PROCEDURE InsertRand(IN NumRows INT, IN MinVal INT, IN MaxVal INT)
    BEGIN
        DECLARE i INT;
        SET i = 1;
        START TRANSACTION;
        WHILE i <= NumRows DO
            INSERT INTO rand_numbers VALUES (MinVal + CEIL(RAND() * (MaxVal - MinVal)));
            SET i = i + 1;
        END WHILE;
        COMMIT;
    END$$
DELIMITER ;

CALL InsertRand(1111, 2222, 5555);

然后,您可以重用该过程,根据不同的参数插入更多的随机值。假设600行的随机值在1200到8500之间:

CALL InsertRand(600, 1200, 8500);
票数 39
EN

Stack Overflow用户

发布于 2014-04-10 20:52:04

在不创建存储过程的情况下,我应用的一种技术是使用表本身添加列。首先给它设定一个值...

INSERT INTO rand_numbers ( number ) VALUES ( rand() * 3333 );

然后再次插入,每次从该表中选择以使行数加倍...

INSERT INTO rand_numbers ( number ) SELECT number * rand() FROM rand_numbers; 

您不需要多次运行第二个查询来获得相当多的随机行。当然,不像使用存储过程那样“整洁”,只是提出了一种替代方案。

正如mohamed23gharbi所指出的,如果你的测试质量太大,你可能会遇到重复的情况。如果有问题,可以使用INSERT IGNORE跳过重复项。

票数 35
EN

Stack Overflow用户

发布于 2015-05-14 16:09:13

该任务也可以通过以下方式完成:

-- scale from 0 to MAX

UPDATE `table` SET `column` = 1000 * RAND() WHERE 1;

-- scale from MIN to MAX

UPDATE `table` SET `column` = MIN + (MAX - MIN) * RAND() WHERE 1;

您还可以在表达式中使用FLOOR()、CEIL()等数学函数。

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

https://stackoverflow.com/questions/11042546

复制
相关文章

相似问题

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