场景
Navicat通过存储过程批量插入mysql数据:
Navicat通过存储过程批量插入mysql数据_霸道流氓气质的博客-CSDN博客
上面使用过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然后运行。