我将问一个已经在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提示符下做这么简单的事情。
发布于 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);
发布于 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
跳过重复项。
发布于 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()等数学函数。
https://stackoverflow.com/questions/11042546
复制相似问题