用存储过程向数据库添加大量数据【mysql】
预分配ID的设计,需要先为数据库生成大量的数据。比如对用户ID有要求的系统,那么用户ID就要预先生成。
通过python,php,c/c++/c#,js等程序生成也是可以,但需要这些程序环境,而且单条插入太慢,又因为数据包大小问题,需要切割INSERT语句。还要写连接字符串,安装组件等等,比较麻烦。
我写了一个通过存储过程即可实现大批量插入的代码,虽然也是要切割,但减少了很多环节,使数据库部分更完整,更容易分发与部署。
其核心思想是拼接字符串concat,执行execute,大于1万行则分开执行。
首先创建测试用的表:
CREATE TABLE `map` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`gp` point DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
然后是存储过程:
CREATE PROCEDURE `init_map`(in count int)
BEGIN
declare jump int DEFAULT count;
WHILE jump>0 DO BEGIN
DECLARE i INT DEFAULT 1;
DECLARE c INT DEFAULT jump;
IF c>10000 THEN
SET c=10000;
END IF;
SET @sq=concat("INSERT INTO map(gp) VALUES (st_geomfromtext('POINT(",(rand()*50+75)," ",(rand()*50+75),")'))");
WHILE i<c DO
SET @sq=concat(@sq,",(st_geomfromtext('POINT(",(rand()*50+75)," ",(rand()*50+75),")'))");
SET i=i+1;
END WHILE;
SELECT @sq;
PREPARE s FROM @sq;
EXECUTE s;
DEALLOCATE PREPARE s;
SET jump=jump-c;
END;
END WHILE;
END
然后是执行存储过程,10万行,观察时间,当然是很快的。
CALL init_map(100000);
用存储过程向数据库添加大量数据【mysql】的更多相关文章
- MySql使用存储过程清除数据库所有表数据,保存数据结构
BEGIN DECLARE strClear VARCHAR(256); DECLARE done INT DEFAULT 0; #定义游标 DECLARE curOne CURSOR FOR sel ...
- 向数据库添加中文数据乱码的解决办法(本文使用spring-jdbcTemplate)
由于编码字符集的不同通常容易导致数据库中文乱码问题,如显示问号. 往往由以下三个方面所造成的 (一):数据库端字符集设置 1.安装mysql时,会有一个数据库编码设置,将其设置为utf-8 2.先设置 ...
- EF CodeFirst系列(9)---添加初始化数据和数据库迁移策略
1.添加初始化数据(Seed) 我们可以在初始化数据库的过程中给数据库添加一些数据.为了实现初始化数据(seed data)我们必须创建一个自定义的数据库初始化器(DB initializer),并重 ...
- Django(六)实战2:向数据库添加,删除数据、重定向写法、重定向简写
一.向数据库添加图书数据 [上接]https://blog.csdn.net/u010132177/article/details/103831173 1)首先开启mysql服务,并运行项目 启动my ...
- [转]Magento2开发教程 - 如何向数据库添加新表
本文转自:https://www.cnblogs.com/xz-src/p/6920365.html Magento 2具有特殊的机制,允许你创建数据库表,修改现有的,甚至添加一些数据到他们(如安装数 ...
- Magento2开发教程 - 如何向数据库添加新表
Magento 2具有特殊的机制,允许你创建数据库表,修改现有的,甚至添加一些数据到他们(如安装数据,已被添加在模块安装). 这种机制允许这些变化可以在不同的设备之间传输. 关键的概念是,而不是做你能 ...
- 及时从数据库中取得数据填放进Form表单的多选框中
#写上以下代码就不用担心数据库添加了数据而不能及时获取了 def __init__(self, *args, **kwargs): #每次创建Form1对象时执行init方法 super(Form1, ...
- Mysql使用存储过程快速添加百万数据
前言 为了体现不加索引和添加索引的区别,需要使用百万级的数据,但是百万数据的表,如果使用一条条添加,特别繁琐又麻烦,这里使用存储过程快速添加数据,用时大概4个小时. 创建一个用户表 CREATE TA ...
- 切记!pycharm向mysql数据库添加数据过程
python 导入包import requests 以爬取腾讯招聘网的招聘信息为例:(完整代码) import requestsfrom lxml import etreeimport pymys ...
随机推荐
- Android版数据结构与算法(六):树与二叉树
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 之前的篇章主要讲解了数据结构中的线性结构,所谓线性结构就是数据与数据之间是一对一的关系,接下来我们就要进入非线性结构的世界了,主要是树与图,好了接 ...
- maven私服上传jar包
将一下脚本保存在.bat文件执行,红色部分按实际情况修改: @echo off set groupId=com.xxxset artifactId=xxxset version=0.0.1set ja ...
- Mybaits-plus实战(一)
1. Mybaits-plus实战(一) 1.1. 快速开始 1.1.1. 配置文件 # 扫描位置 mybatis-plus.mapper-locations=classpath:/mapper/*M ...
- osi参考模型(开放系统互连参考模型)
自互联网诞生以来,随着网络飞速发展,用户迫切要求能在不同体系结构的网络空间交换信息,使得不同的网络能够互联起来. 国际化标准组织(International Organization for Stan ...
- v4v7升级到androidx过程
因为原项目应用的都是v4v7包,谷歌改成androidx后就升级了一番,首先在properties文件 然后在菜单里点击升级,studio会帮你把报名什么的都改掉 打开项目,发现都自动改掉了,完美,然 ...
- netdom join 错误:指定的域不存在,或无法联系。
环境: 域控制器:feiquan.com IP:192.168.1.132 客户端:\\win-quan IP:192.168.1.129(动态) 域控制器可以和客户端ping通,但客户端加入域时就 ...
- nginx部署静态网站
实验环境 服务器:centos7.5 1核1G Nginx版本:nginx-1.14.2 主题 部署静态文件 根据不同url请求路径,定向到不同的系统文件夹 部署静态文件 假设nginx安装在“/us ...
- Velocity 模板引擎的应用
springboot三层机构,还有数据映射待实体.肯定需要一套模板引擎呀.那不然还手写不成. 根据我们的实际业务需求,我添加了一套数据库反向生成实体类的模板,用的是Velocity 的引擎. 不多说直 ...
- python进程和线程(五)
python的进程 由于GIL的存在,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包m ...
- LeetCode算法题-Robot Return to Origin(Java实现)
这是悦乐书的第281次更新,第298篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第149题(顺位题号是657).在2D平面上有一个从位置(0,0)开始的机器人.给定其移 ...