Mysql利用存储过程插入500W条数据
比如插入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利用存储过程插入500W条数据的更多相关文章
- Mysql利用存储过程插入400W条数据
CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(20) NO ...
- 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万条历史案卷,为某地方坐标系数据,我们的真实 ...
随机推荐
- Zabbix监控Nginx状态信息
首先要检查Nginx是否安装了 http_stub_status_module 模块,通过下面的命令可以看到编译参数.yum安装的默认会带有这个模块. [root@kafka60 ~]# /data/ ...
- ELK篇---------elasticsearch集群安装配置
说明: 本次ELK的基础配置如下: 虚拟机:vmware 11 系统:centos7.2 两台 IP:172.16.1.15/16 一.下载es wget https://download.elas ...
- linux下配置Java_web环境
I安装JDK 1下载jdk*.bin/jdk*.rpm文件 2把安装包copy到安装目录 cp jdk*.bin /www/java 3安装JDK 如果是.bin文件,直接在复制的当前目录执行即可 . ...
- 数据库和struts2的拦截器
1.READ UNCOMMITTED:脏读.不可重复读.虚读都有可能发生2.READ COMMITTED:防止脏读的发生,不可重复读,虚读都有可能发生3.REPEATABLE READ:防止脏读,不可 ...
- zabbix修改Template OS Linux模版使已使用内存(Used memory)更准确
说明: [root@coolnull ~]# free -m total used free shared buffers cached Mem: 995 785 209 0 6 92 -/+ buf ...
- 最大生成树——LCA
今天说是要练习LCA结果找了道题看着题解打完了,如此惭愧,Lca还得好好理解啊,感觉在最大生成树上做有点异样,可能还是不是很理解吧,在noip前一定要再把这道题再a一遍,好题啊. 这是2013noip ...
- SpringBoot @Transactional声明事务无效问题
查看系统支持的存储引擎:show engines; 查看表使用的引擎:show table status from db_name where name='table_name'; 修改表引擎方法: ...
- go-001-环境部署,IDEA插件
一.下载安装 https://golang.org/dl/ 下载之后安装即可 官网地址:https://golang.org/ 1.1.mac上安装go 1.安装Homebrew 安装命令: ruby ...
- 让人抓狂的MySQL安装-8.0.12版本
今天一个下午就做了一件事,把MySQL安装成功,安装的过程让人很狂躁.于是一边骂,一边查错,才把这个软件给安装成功了. 详细的安装步骤,这里就不赘述了.参见https://blog.csdn.net/ ...
- [vue]组件最佳实战
[vue]全局组件和局部组件(嵌套+props引用父组件数据) [vue]组件篇 [vue]组件的创建(componet)和销毁(keep-alive缓存)和父子dom同步nextTick [vue] ...