Mysql利用存储过程插入400W条数据
比如插入1000W数据,不建议一次性插入,比如一次插入500W,分批插入。
创建表
/*部门表*/
CREATE TABLE dept(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, /*id*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT , /*编号*/
dname VARCHAR() NOT NULL DEFAULT "",/*名称*/
loc VARCHAR() NOT NULL DEFAULT "" /*地点*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*EMP雇员表*/
CREATE TABLE emp(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, /*id*/
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT ,/*编号*/
ename VARCHAR() NOT NULL DEFAULT "",/*名字*/
job VARCHAR() NOT NULL DEFAULT "",/*工作*/
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT ,/*是哪个及编号*/
hiredate DATE NOT NULL,/*入职时间*/
sal DECIMAL(,) NOT NULL,/*薪水*/
comm DECIMAL(,) NOT NULL,/*红利*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT /*部门编号*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*工资级别表*/
CREATE TABLE salgrade(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT ,
losal DECIMAL(,) NOT NULL,
hisal DECIMAL(,) NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
#定义一个新的命令结束符
delimiter $$
创建函数
Mysql在插入大量数据的时候,Mysql自身会报错,我们需要设置参数一个二进制日志开启的功能模块。
比如创建函数的时候,会报错
ERROR (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declar
假如开启了慢查询日志,因为开启了bin-log,那么我们必须为function指定一个参数
MySQL [test_db]> show variables like 'log_bin_trust_function_creators'; //注意命令结束符
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
set global log_bin_trust_function_creators = ; //注意命令结束符
如果命令方式设定参数,mysql重启还会失效,想要永久有效必须修改my.cnf文件
[mysqld]
log_bin_trust_function_creators =
好了,下面开始创建函数
#rand_string(n INT) rand_string 是函数名(n INT) //该函数传参一个整数
create function rand_string(n INT)
returns varchar()
begin
declare chars_str varchar() default
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
declare return_str varchar() default '';
declare i int default ;
while i < n do
set return_str=concat(return_str,substring(chars_str,floor(+rand()*),));
set i = i +;
end while;
return return_str;
end $$
//生成部门号函数
create function rand_num( )
returns int()
begin
declare i int default ;
set i = floor(+rand()*);
return i;
end $$
创建存储过程
create procedure insert_emp(in start int(),in max_num int())
begin
declare i int default ;
#set autocommit = //把autocommit设置成0,这样可以只提交一次,否则。。。。。
set autocommit = ;
repeat
set i = i +;
insert into emp (empno, ename,job,mgr,hiredate,sal,comm,deptno) values ((start+i),rand_string(),'SALESMAN',,curdate(),,,rand_num());
until i = max_num
end repeat;
commit;
end $$
修改命令结束符后,调用刚刚写好的函数,从100001号开始,产生5000000记录,这里一次插入了
call insert_emp(,);
Mysql利用存储过程插入400W条数据的更多相关文章
- Mysql利用存储过程插入500W条数据
比如插入1000W数据,不建议一次性插入,比如一次插入500W,分批插入. 创建表 /*部门表*/ CREATE TABLE dept( id INT UNSIGNED PRIMARY KEY AUT ...
- mysql用存储过程插入百万条数据, 及查询优化
查看所有存储过程: show procedure status; 查看详细存储过程 ptest: show create procedure ptest; 存储过程插入数据: create table ...
- mysql一次插入多条数据
mysql一次插入多条数据: INSERT INTO hk_test(username, passwd) VALUES ('qmf2', 'qmf2'),('qmf3', 'qmf3'),('qmf4 ...
- MySQL往表里插入千条数据 存储过程
工作中遇到的问题,先记录一下,方便以后查看 存在两张表,user表和friend表 user表部分字段,如上图 friend表部分字段,如上图 往friend表插入千条数据,friend表中的user ...
- MySql LAST_INSERT_ID 【插入多条数据时】
LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generat ...
- 批处理数据库(利用batch插入2w条数据)
public class Demo02Batch { /* * 批处理 */ public static void main(String[] args) { Connection conn=null ...
- mysql利用存储过程批量插入数据
最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: [sql]view plaincopy CR ...
- mysql命令行批量插入100条数据命令
先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...
- WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...
随机推荐
- java进行图片和字符串的互相转换
今天做项目,突然发现图片居然能转成字符串,字符串也能转成图片. 接下来让我们进行代码演示吧! /** * 字符串转图片 * @param imgStr --->图片字符串 * @param fi ...
- 2018年web前端学习路线图
前端的的技术一直在变化,更新和变革,现在基本是三驾马车(vue,angualr,react)主导整个前端框架,但是无论对于新人或者有经验的程序员,这些知识在必须掌握 前端必会技能 上图罗列了整个前端的 ...
- Django_上传图片和模版获取图片
需求: 在Django中,上传图片,存入数据库中的文件的路径,而不是图片本身,也就是说,图片等数据静态文件都可以放到第三方服务器上,我想在把图片保存到Django本地项目中,并可以通过Django自带 ...
- python_9_集合
什么是集合? --一种无序,没有重复元素的一种数据类型 -- 形式: {元素1,元素2,......} 如何把一个列表变成一个集合? --set(列表) ...
- CentOS如何把deb转为rpm
说明:可以转换,但不一定可用,可以根据报错提示,安装需要的依赖. 1 安装alien工具,下载地址http://ftp.de.debian.org/debian/pool/main/a/alien/ ...
- CSS--开篇
1,什么是CSS? 层叠样式表(Cascading Style Sheet ),定义了如何显示HTML元素,用来控制网页的样式和布局. 引入CSS后:HTML标记专门用于定义网页的内容,而使用CSS来 ...
- c++ singleton单例模式
方法1:加锁的经典懒汉实现: class singleton { public: static pthread_mutex_t mutex; static singleton* initance(); ...
- 开发JQuery插件(转)
教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...
- easyui_datagrid 行内使用comobox的编码实现
easyui datagrid组件的列属性中有一个editor属性,官方介绍如下: 所以,我们可以通过编码实现datagrid行内插入comobox的方式来实现某些场合的需要,具体编码实现如下: // ...
- 小白学Docker之Compose
承接上篇文章:小白学Docker之基础篇,自学网站来源于https://docs.docker.com/get-started 概念 Compose是一个编排和运行多容器Docker应用的工具,主要是 ...