自用的单表的大批量随机数据插入的方法(过程procedure和函数function)
说明
因为win下没有找到合适的批量随机插入的工具,也懒的在后端代码里写一套插入方法
直接在mysql下写个过程、函数来实现,当前版本比较死板和基础,记录下方便自己以后扩展!
表结构
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(10) unsigned | NO | PRI | NULL | auto_increment |
third_id | int(10) unsigned | NO | MUL | 0 | |
third_recycle_id | int(10) | NO | 0 | ||
order_num | char(16) | NO | UNI | ||
order_time | int(11) | NO | NULL | ||
brand | int(10) unsigned | NO | 0 | ||
brand_model | int(10) unsigned | NO | 0 | ||
third_brand | int(10) unsigned | NO | 0 | ||
third_brand_model | int(10) unsigned | NO | MUL | 0 | |
actual_price | decimal(8,2) unsigned | NO | 0.00 | ||
payment_way | tinyint(1) | NO | 0 | ||
items | varchar(300) | NO | |||
status | tinyint(1) | NO | NULL | ||
create_time | int(10) unsigned | NO | MUL | 0 |
过程
DROP PROCEDURE if exists insert_recycle_order;
CREATE PROCEDURE insert_recycle_order (
IN total INT,
IN third_id INT,
OUT insertCount INT
)
BEGIN
DECLARE i INTEGER;
DECLARE newid INTEGER;
SET i = 0;
SET insertCount = 0;
SET newid = 0;
WHILE i < total DO
-- ignore 忽略无法插入的数据
INSERT IGNORE INTO recycle_order (
third_id,
third_recycle_id,
order_num,
third_brand,
third_brand_model,
actual_price,
payment_way,
payment_num,
items,
`STATUS`,
create_time
)
VALUES
(
third_id,
i,
order_rand (),
CEIL(rand() * 100),
CEIL(rand() * 100),
CEIL(rand() * 500),
CEIL(rand() * 8),
CEIL(rand() * 100),
items_rand (),
CEIL(rand() * 8),
UNIX_TIMESTAMP(now()) + i
);
set newid = LAST_INSERT_ID();
IF newid > 0 THEN
SET insertCount = insertCount + 1;
END IF;
SET i = i + 1;
END
WHILE;
END
函数
DROP FUNCTION IF EXISTS order_rand;
CREATE FUNCTION order_rand () RETURNS VARCHAR (16)
BEGIN
DECLARE order_num VARCHAR (16);
DECLARE uuid VARCHAR (50);
DECLARE tmpLast VARCHAR (50);
DECLARE i INTEGER;
SET order_num = DATE_FORMAT(now(), '%Y%m%d');
SET uuid = uuid();
SET tmpLast = '';
SET i = 1;
/*
WHILE i <= 8 DO
SET tmpLast = CONCAT(
tmpLast,
ORD(SUBSTRING(uuid, CEIL(rand()*36),1))
);
SET i = i + 1;
END
WHILE;
SET order_num = CONCAT(order_num, SUBSTRING(tmpLast, 1, 8));
*/
SET tmpLast = CONCAT(
tmpLast,
REPLACE(SUBSTRING(uuid, CEIL(rand()*24),8), '-', CEIL(rand()*9))
);
SET order_num = CONCAT(order_num, tmpLast);
RETURN order_num;
END
DROP FUNCTION IF EXISTS items_rand;
CREATE FUNCTION items_rand () RETURNS VARCHAR (50);
BEGIN
DECLARE items VARCHAR (50);
DECLARE i INTEGER;
SET items = '';
SET i = 0;
WHILE i <= 12 DO
SET items = CONCAT(items, '#',ceil((RAND() * 100)));
SET i = i + 1;
END
WHILE;
RETURN items;
END
调用方法
set @count = 0;
call insert_recycle_order(100000,1001,@count);
select @count;
推荐阅读
Laravel/Lumen 优化包 - 注解注入路由自动配置
背景 因大量的路由配置信息,不同时段的多人员开发,造成git冲突 路由信息过多,造成维护困难 安装 {代码...} 注册中间件和提供者 安装包里已包含了几个demo版本的Middleware,自取自用 {代码...} env {代码...} ...
Object赞 2阅读 4.7k评论 5
初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。
王中阳Go赞 4阅读 1.7k评论 2
Vue+Express+Mysql全栈项目之增删改查、分页排序导出表格功能
本文记录一下实现一个全栈项目,前端使用vue框架、后端使用express框架、数据库使用mysql。此项目的意义不仅仅有助于我们复习nodejs相关知识、更有助于带前端新人,使其快速从整体全局角度中,理解常规后台管理系...
水冗水孚赞 4阅读 2.6k
MySQL百万数据深度分页优化思路分析
一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行分页查看,最常见的一种就是根据日期进行筛选。这种统计数据随着时间的推移数据量会慢慢的变大,达到百万...
一个程序员的成长赞 7阅读 919
深入理解MySQL索引底层数据结构
在日常工作中,我们会遇见一些慢SQL,在分析这些慢SQL时,我们通常会看下SQL的执行计划,验证SQL执行过程中有没有走索引。通常我们会调整一些查询条件,增加必要的索引,SQL执行效率就会提升几个数量级。我们有没...
京东云开发者赞 3阅读 591
Laravel入门及实践,快速上手ThinkSNS+二次开发
【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。
ThinkSNS赞 1阅读 2.4k
一文了解MySQL中的多版本并发控制
作者:京东零售 李泽阳最近在阅读《认知觉醒》这本书,里面有句话非常打动我:通过自己的语言,用最简单的话把一件事情讲清楚,最好让外行人也能听懂。也许这就是大道至简,只是我们习惯了烦琐和复杂。希望借助...
京东云开发者赞 2阅读 515
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。