在Mysql中插入百万级别数据的方法
首先,建立部门表和员工表:
部门表:
- create table dept(
- id int unsigned primary key auto_increment,
- deptno mediumint unsigned not null default 0,
- dname varchar(20) not null default "",
- loc varchar(13) not null default ""
- )ENGINE=INNODB DEFAULT CHARSET=GBK
员工表:
- create table emp(
- id int unsigned primary key auto_increment,
- empno mediumint unsigned not null default 0,
- ename varchar(20) not null default "",
- job varchar(9) not null default "",
- mgr mediumint unsigned not null default 0,
- hiredate date not null,
- sal decimal(7,2) not null,
- comm decimal(7,2) not null,
- deptno mediumint unsigned not null default 0
- )ENGINE=INNODB DEFAULT CHARSET=GBK
开启二进制日志:
通过
- show variables like 'log_bin_trust_function_creators'
可以看到默认的二进制日志时关闭的
- Variable_name |Value |
- --------------------------------|------|
- log_bin_trust_function_creators |OFF |
通过下面的命令进行设置:
- set global log_bin_trust_function_creators=1
- Variable_name |Value |
- --------------------------------|------|
- log_bin_trust_function_creators |ON |
1.创建一个生成随机字符串的函数:
- DELIMITER $$
- create FUNCTION rand_string(n int) returns varchar(255)
- BEGIN
- declare chars_str varchar(100) default 'abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- declare return_str varchar(255) default '';
- declare i int default 0;
- while i<n DO
- set return_str=CONCAT(return_str,substring(chars_str,floor(1+rand()*52),1));
- set i=i+1;
- end while;
- return return_str;
- END $$
通过DELIMITER定义mysql语句的结束符,因为函数中多处有分号,如果不修改掉默认的结束符;那么函数将会产生错误
随后,创建生成随机数的函数:
- delimiter $$
- create function rand_num() RETURNS int(5)
- begin
- declare i int default 0;
- set i=floor(100+rand()*10);
- return i;
- end $$
插入员工表函数:
- delimiter $$
- create procedure insert_emp(IN START INT(10),IN max_num int(10))
- begin
- declare i int default 0;
- set autocommit=0;
- repeat
- set i=i+1;
- insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values((start+i),rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
- until i=max_num
- end repeat;
- commit;
- end $$
插入部门的函数:
- delimiter $$
- create procedure insert_dept(IN START INT(10),IN max_num INT(10))
- begin
- declare i int default 0;
- set autocommit=0;
- repeat
- set i=i+1;
- insert into dept(deptno,dname,loc) values((start+i),rand_string(10),rand_string(8));
- until i=max_num
- end repeat;
- commit;
- end $$
- end $$
调用上边的两个插入函数
- call insert_dept(100,10);
- +----+--------+------------+----------+
- | id | deptno | dname | loc |
- +----+--------+------------+----------+
- | 1 | 101 | OVnDatOMsA | BbGYWOaO |
- | 2 | 102 | PHQffkLYGl | mEgXmxza |
- | 3 | 103 | IljlEhcRXn | xvJjUSGz |
- | 4 | 104 | EwuFUElxBk | zNrtSdVl |
- | 5 | 105 | vtHaksNIb | mdGUBVar |
- | 6 | 106 | FamifbRZyr | ljmJDQso |
- | 7 | 107 | tYLKrAAbHd | ziuuQRKZ |
- | 8 | 108 | SpXNXzEvmc | ByJZUzNo |
- | 9 | 109 | hXlpSoXPfj | HDUNcbT |
- | 10 | 110 | sfBoRlLUlA | OtCCdPIU |
- +----+--------+------------+----------+
在员工表中插入50W条数据,
- mysql> call insert_emp(100001,500000);
这样就实现了大量数据的插入。
在Mysql中插入百万级别数据的方法的更多相关文章
- 关于如何在mysql中插入一条数据后,返回这条数据的id
简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...
- mssql 一次向表中插入多条数据的方法分享 (转自:http://www.maomao365.com/?p=6058)
转自:http://www.maomao365.com/?p=6058) <span style="font-size:16px;font-weight:bold;"> ...
- PHP向MySql中插入数据
<!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Prope ...
- [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- JAVA使用POI如何导出百万级别数据(转)
https://blog.csdn.net/happyljw/article/details/52809244 用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会 ...
- JAVA使用POI如何导出百万级别数据
用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会常报OOM错误,这时候调整JVM的配置参数也不是一个好对策(注:jdk在32位系统中支持的内存不能超过2个G,而在6 ...
- JAVA使用POI如何导出百万级别数据(转载)
用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会常报OOM错误,这时候调整JVM的配置参数也不是一个好对策(注:jdk在32位系统中支持的内存不能超过2个G,而在6 ...
- 百万级别数据Excel导出优化
前提 这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出. 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节点部署,但是发现 ...
- MYSQL中约束及修改数据表
MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括: NOT NULL(非空约束) PRIMARY KEY(主键约束) UNI ...
随机推荐
- POJ. 2253 Frogger (Dijkstra )
POJ. 2253 Frogger (Dijkstra ) 题意分析 首先给出n个点的坐标,其中第一个点的坐标为青蛙1的坐标,第二个点的坐标为青蛙2的坐标.给出的n个点,两两双向互通,求出由1到2可行 ...
- poco入门
源码按照poco.然后看README,进行安装. ./configure make make install #include "Poco/ActiveMethod.h" #inc ...
- Linux之SSL安全套接字20160704
使用SSL前,先有 基本的TCP套接字连接.见demo代码 SSL_library_init();//在使用OpenSSL 之前,必须进行相应的协议初始化工作 OpenSSL_add_all_algo ...
- scanf函数用法小记
By francis_hao Aug 26,2017 scanf – 输入格式转换 概述 #include <stdio.h>int scanf(const char *fo ...
- Linux 环境下用Tomcat 发布项目
1.前提条件: a.安装远程连接Linux软件:F-Secure SSH File Transfer Trial[简写为:FSSH]: b.打开FSSH,远程连接Linux[单击“Quick Conn ...
- bzoj [POI2007]旅游景点atr 状态压缩+Dij
[POI2007]旅游景点atr Time Limit: 30 Sec Memory Limit: 357 MBSubmit: 2258 Solved: 595[Submit][Status][D ...
- AndroidManifest Ambiguity方案原理及代码
1简述 前段时间在bluebox的一份android安全pdf中看到一个AndroidManifest Ambiguity方案.该方案基于android系统解析AXML的一个特点:android在解析 ...
- Java中x=x+1 与x+=1 的一点区别
转载自:http://www.cnblogs.com/heshan664754022/archive/2013/04/01/2994028.html 作者:十年半山 今天同悦姐学到了关于Java的复合 ...
- .net core Fundamentals
• Application Startup 應用程序啟動 • Middleware 中間件 • Working with Static Files 靜態文件 • Routing 路由 • URL Re ...
- Idea Ant 打开发包
简介: http://ju.outofmemory.cn/entry/19239 语法: https://wenku.baidu.com/view/a0e00315866fb84ae45c8d9d.h ...