场景

Navicat通过存储过程批量插入mysql数据:

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/87855148

上面使用过Navicat借助存储过程批量插入数据。但是插入数据是固定的

insert语句,如果在本地开发时需要模拟插入一些随机数据(从指定选择项中随机选择),

如果涉及到时间字段,还需要指定时间范围内随机生成时间。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

1、使用ELT(CEILING(rand( ) * 8) ,)函数随机选择插入项的值

使用FROM_UNIXTIME( UNIX_TIMESTAMP())函数生成随机时间段内的数据。

示例Insert语句

INSERT `test` ( `car_num`, `no_login_type`, `record_time`, `last_login_number`, `last_login_time`, `remark` )
VALUES
 (
  ELT(CEILING(rand( ) * 8) ,  '测试1', '测试2', '测试3', '测试4', '测试5', '测试6', '测试7', '测试8'),
  ELT(CEILING(rand( ) * 2) ,  '1', '2'),
  FROM_UNIXTIME( UNIX_TIMESTAMP( '2023-01-01 14:53:27' ) + FLOOR( 0 + ( RAND() * 60 * 60 * 24 * 30 * 6 )) ),
  'test',
  '2023-01-09 16:06:01',
 NULL
 );

比如这里car_num就使用从'测试1', '测试2', '测试3', '测试4', '测试5', '测试6', '测试7', '测试8'随机选择。

no_login_type使用从'1', '2'中随机选择。

时间字段这里就是从2023-01-01 14:53:27开始至后面6个月内的随机时间。

2、还是使用Navicat新建存储过程

函数-新建函数-过程

 

 

添加输入参数模式IN,名字自定义,类型为int,用来做执行次数的输入参数

新建成功之后默认为

 

 

 

修改其内容为

CREATE DEFINER=`root`@`localhost` PROCEDURE `pro_insertMany`(in num INT)
BEGIN
 DECLARE i int DEFAULT 1;
 WHILE i<=num DO
  
INSERT INTO `bus_driver_no_login_record` ( `car_num`, `no_login_type`, `record_time`, `last_login_number`, `last_login_time`, `remark` )
VALUES
 (
  ELT(CEILING(rand( ) * 8) ,  '测试1', '测试2', '测试3', '测试4', '测试5', '测试6', '测试7', '测试8'),
  ELT(CEILING(rand( ) * 2) ,  '1', '2'),
  FROM_UNIXTIME( UNIX_TIMESTAMP( '2023-01-01 14:53:27' ) + FLOOR( 0 + ( RAND() * 60 * 60 * 24 * 30 * 6 )) ),
  'test',
  '2023-01-09 16:06:01',
 NULL
 );
   
  SET i=i+1;
 END WHILE;
END

中间为要执行插入数据的语句。

num为循环次数,即上面添加的IN参数。

pro_insertMany为自定义保存的存储过程名称。

保存运行,输入num然后运行。

 

 

posted on 2023-02-23 13:34  霸道流氓  阅读(157)  评论(0编辑  收藏  举报