首先,建立部门表和员工表:

部门表:

  1. create table dept(
  2. id int unsigned primary key auto_increment,
  3. deptno mediumint unsigned not null default 0,
  4. dname varchar(20) not null default "",
  5. loc varchar(13) not null default ""
  6. )ENGINE=INNODB DEFAULT CHARSET=GBK

员工表:

  1. create table emp(
  2. id int unsigned primary key auto_increment,
  3. empno mediumint unsigned not null default 0,
  4. ename varchar(20) not null default "",
  5. job varchar(9) not null default "",
  6. mgr mediumint   unsigned not null default 0,
  7. hiredate date not null,
  8. sal decimal(7,2) not null,
  9. comm decimal(7,2) not null,
  10. deptno mediumint unsigned not null default 0
  11. )ENGINE=INNODB DEFAULT CHARSET=GBK

开启二进制日志:

通过

  1. show variables like 'log_bin_trust_function_creators'

可以看到默认的二进制日志时关闭的

  1. Variable_name                   |Value |
  2. --------------------------------|------|
  3. log_bin_trust_function_creators |OFF   |

通过下面的命令进行设置:

  1. set global log_bin_trust_function_creators=1
  1. Variable_name                   |Value |
  2. --------------------------------|------|
  3. log_bin_trust_function_creators |ON    |

1.创建一个生成随机字符串的函数:

  1. DELIMITER $$
  2. create FUNCTION rand_string(n int) returns varchar(255)
  3. BEGIN
  4. declare chars_str varchar(100) default 'abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  5. declare return_str varchar(255)     default '';
  6. declare i int default 0;
  7. while i<n DO
  8. set return_str=CONCAT(return_str,substring(chars_str,floor(1+rand()*52),1));
  9. set i=i+1;
  10. end while;
  11. return return_str;
  12. END $$

通过DELIMITER定义mysql语句的结束符,因为函数中多处有分号,如果不修改掉默认的结束符;那么函数将会产生错误

随后,创建生成随机数的函数:

  1. delimiter $$
  2. create function rand_num() RETURNS int(5)
  3. begin
  4. declare i int default 0;
  5. set i=floor(100+rand()*10);
  6. return i;
  7. end $$

插入员工表函数:

  1. delimiter $$
  2. create procedure insert_emp(IN START INT(10),IN max_num int(10))
  3. begin
  4. declare i int default 0;
  5. set autocommit=0;
  6. repeat
  7. set i=i+1;
  8. insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values((start+i),rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
  9. until i=max_num
  10. end repeat;
  11. commit;
  12. end $$

插入部门的函数:

  1. delimiter $$
  2. create procedure insert_dept(IN START INT(10),IN max_num INT(10))
  3. begin
  4. declare i int default 0;
  5. set autocommit=0;
  6. repeat
  7. set i=i+1;
  8. insert into dept(deptno,dname,loc) values((start+i),rand_string(10),rand_string(8));
  9. until i=max_num
  10. end repeat;
  11. commit;
  12. end $$
  13. end $$

调用上边的两个插入函数

  1. call insert_dept(100,10);
  1. +----+--------+------------+----------+
  2. | id | deptno | dname      | loc      |
  3. +----+--------+------------+----------+
  4. |  1 |    101 | OVnDatOMsA | BbGYWOaO |
  5. |  2 |    102 | PHQffkLYGl | mEgXmxza |
  6. |  3 |    103 | IljlEhcRXn | xvJjUSGz |
  7. |  4 |    104 | EwuFUElxBk | zNrtSdVl |
  8. |  5 |    105 | vtHaksNIb  | mdGUBVar |
  9. |  6 |    106 | FamifbRZyr | ljmJDQso |
  10. |  7 |    107 | tYLKrAAbHd | ziuuQRKZ |
  11. |  8 |    108 | SpXNXzEvmc | ByJZUzNo |
  12. |  9 |    109 | hXlpSoXPfj | HDUNcbT  |
  13. | 10 |    110 | sfBoRlLUlA | OtCCdPIU |
  14. +----+--------+------------+----------+

在员工表中插入50W条数据,

  1. mysql> call insert_emp(100001,500000);

这样就实现了大量数据的插入。

在Mysql中插入百万级别数据的方法的更多相关文章

  1. 关于如何在mysql中插入一条数据后,返回这条数据的id

    简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...

  2. mssql 一次向表中插入多条数据的方法分享 (转自:http://www.maomao365.com/?p=6058)

    转自:http://www.maomao365.com/?p=6058) <span style="font-size:16px;font-weight:bold;"> ...

  3. PHP向MySql中插入数据

    <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Prope ...

  4. [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. JAVA使用POI如何导出百万级别数据(转)

    https://blog.csdn.net/happyljw/article/details/52809244   用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会 ...

  6. JAVA使用POI如何导出百万级别数据

    用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会常报OOM错误,这时候调整JVM的配置参数也不是一个好对策(注:jdk在32位系统中支持的内存不能超过2个G,而在6 ...

  7. JAVA使用POI如何导出百万级别数据(转载)

    用过POI的人都知道,在POI以前的版本中并不支持大数据量的处理,如果数据量过多还会常报OOM错误,这时候调整JVM的配置参数也不是一个好对策(注:jdk在32位系统中支持的内存不能超过2个G,而在6 ...

  8. 百万级别数据Excel导出优化

    前提 这篇文章不是标题党,下文会通过一个仿真例子分析如何优化百万级别数据Excel导出. 笔者负责维护的一个数据查询和数据导出服务是一个相对远古的单点应用,在上一次云迁移之后扩展为双节点部署,但是发现 ...

  9. MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNI ...

随机推荐

  1. 【BZOJ4066】简单题(KD-Tree)

    [BZOJ4066]简单题(KD-Tree) 题面 BZOJ 题解 如果这题不卡空间,并且不强制在线的话 显然可以用\(CDQ\)分治做 但是它又卡空间又强制在线,于是我们欢快的来用\(KD-Tree ...

  2. BZOJ3930:[CQOI2015]选数——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3930 https://www.luogu.org/problemnew/show/P3172#sub ...

  3. hdu 5625

    Clarke and chemistry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  4. 三大linux系统对比

    概述: centos作为服务器部署是第一选择.CentOS去除很多与服务器功能无关的应用,系统简单但非常稳定,命令行操作可以方便管理系统和应用,丰富的帮助文档和社区的支持. ubuntu最佳的应用领域 ...

  5. Getting Private/Public IP address of EC2 instance using AWS-cli [closed]

    For private IP address: aws ec2 describe-instances --instance-ids i-b78a096f | grep PrivateIpAddress ...

  6. mongo在centos与windows上部署与配置,及远程连接mongo与数据用户和角色分配

    1.下载mongodb社区版: windows 安装包安装: https://www.mongodb.com/download-center#community(mongo下载中心) 配置环境变量 控 ...

  7. java有关Time类型数据的接收和转换

    一:前言 有关Time的时间其实很少有用到.但是用到就很纠结了,转换和保存,都是烦人的事情,我自己就在这上面吃过一个亏,所以就加载下来吧! 二:内容 (1):被坑的地方 实体类 import java ...

  8. 问题BeanFactory not initialized or already closed - call 'refresh' before access

    问题BeanFactory not initialized or already closed - call 'refresh' before access 2016-08-23 14:22 8565 ...

  9. Asp.net Web Api 2 FORM Authentication Demo

    最近看了一点 web api 2方面的书,对认证都是简单介绍了下,所以我在这里做个简单Demo,本文主要是FORM Authentication,顺带把基本认证也讲了. Demo 一.FORM Aut ...

  10. [2009国家集训队]小Z的袜子(hose)(BZOJ2038+莫队入门题)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题目: 题意:中文题意,大家都懂. 思路:莫队入门题.不过由于要去概率,所以我们假 ...