将随机数据插入到 MySql 中的表中

Posted

技术标签:

【中文标题】将随机数据插入到 MySql 中的表中【英文标题】:Inserting random data into a table in MySql 【发布时间】:2019-12-05 21:37:01 【问题描述】:

有人可以帮我吗?我不知道这里有什么问题

DROP PROCEDURE IF EXISTS insertRandom;
CREATE PROCEDURE insertRandom()
BEGIN
DECLARE mytime timestamp;

    SET mytime := '2009-01-01 00:00:00'
BEGIN
 test_loop : LOOP
    while mytime < now()
        mytime = mytime + interval '8 hours';
        insert into tempdata(temp_val, datum) values((select random()*(110)-10), mytime);
  END LOOP; 
END;

CALL insertRandom;

SELECT * FROM `temp_table`;

【问题讨论】:

请不要使用错误图片;并将错误文本翻译成英文,因为本网站仅支持英文。 【参考方案1】:

您的代码中有很多错误

改用这个程序

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `insertRandom`()
BEGIN
DECLARE mytime timestamp;

    SET mytime := '2009-01-01 00:00:00';
DROP TEMPORARY TABLE IF EXISTS tempdata;
CREATE TEMPORARY TABLE tempdata (temp_val BIGINT, datum timestamp);
 test_loop : LOOP
    IF mytime >= now() THEN
        LEAVE  test_loop;
    END  IF;
        SET mytime = TIMESTAMPADD(HOUR,8,mytime);
        insert into tempdata(temp_val, datum) values((select (rand()*110)-10), mytime);
  END LOOP; 
END$$
DELIMITER ;

然后

call insertRandom();
SELECT * FROM tempdata;

【讨论】:

“where's waldo”的 mysql 语法版本。【参考方案2】:

看起来程序主体中的分号正在终止语句。我们需要 MySQL 将 CREATE PROCEDURE 视为单个语句,但 MySQL 会切断语句,当它看到分号时会看到完整的语句。

MySQL 中默认的语句分隔符是分号; 字符。可以覆盖默认分隔符;我们使用DELIMITER 语句进行更改。

此处示例将语句分隔符临时修改为两个美元符号字符$$。在过程主体中,分号字符的出现不会终止语句...... MySQL 将继续读取,直到找到两个美元符号字符。 (不用说程序主体不应该包含$$

DELIMITER $$ 

DROP PROCEDURE IF EXISTS insertRandom $$

CREATE PROCEDURE insertRandom()
  ...
  ...
  ...
END$$

DELIMITER ;

CALL insertRandom();

请注意,我们使用DELIMITER 语句将分隔符改回分号字符。我没有检查程序主体是否有其他语法错误;但有些事情很突出。例如,这看起来不对

mytime = mytime + interval '8 hours'; 

那应该是SET 语句,语法是这样的:

SET mytime = mytime + INTERVAL 8 HOUR;

SET语句中,我们可以用:=代替=作为赋值运算符,所以等价

SET mytime := mytime + INTERVAL 8 HOUR;

对于 MySQL 存储程序的循环,我们可以执行 LOOP ... END LOOP 并包含 LEAVE 语句,或者我们可以使用 WHILE 循环,或者...

此处记录的语法:

https://dev.mysql.com/doc/refman/5.7/en/while.html

https://dev.mysql.com/doc/refman/5.7/en/loop.html

【讨论】:

以上是关于将随机数据插入到 MySql 中的表中的主要内容,如果未能解决你的问题,请参考以下文章

使用sql语句在mysql的表中随机获取数据

如何从程序 oracle 中的表中随机打印?

sql 一个表里已经 有20行数据 ,然后要从另一个表里随机抽取20条 覆盖掉之前的数据

从 Snowflake 中的表中选择随机百分比(使用 WHERE 子句时)

Mysql插入大量随机数据

Mysql