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

部门表:

  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. Java第一次实验报告——Java开发环境的熟悉

    北京电子科技学院(BESTI) 实    验    报    告 课程名称:java程序设计实验      班级:1352         姓名:洪韶武      学号:20135219 成绩:   ...

  2. 项目管理---git----快速使用git笔记(三)------coding.net注册和新建项目(远程仓库)

    我们在第一章已经了解了github和coding.net的区别: github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开. codin ...

  3. React Render Callback Pattern(渲染回调模式)

    React Render Callback Pattern,渲染回调模式,其实是将this.props.children当做函数来调用. 例如: 要根据user参数确定渲染Loading还是Profi ...

  4. shell中的数值运算

    By francis_hao    Oct 2,2017   本文摘录自bash的man手册.   算数运算相关的形式 形式 含义 ((expression)) expression按照下面描述的算术 ...

  5. Android 命名规范 (转)

    刚接触android的时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的审查和修改过程中就会浪费不少不必要的时间.如果就是我一个人 ...

  6. 在linux下创建软链接(即目录映射)

    在linux中创建软链接,使用命令:ln -s. 语法:ln -s 源文件 目标文件.

  7. UVA 11105 Semi-prime H-numbers

    https://vjudge.net/problem/UVA-11105 筛法 #include<cstdio> #include<cstring> #define N 100 ...

  8. windows下codeblocks报错undefined reference to `WSAStartup@8'|

    Windows下C++Socket编程,调用WSAStartup函数报错:undefined reference to `WSAStartup@8'| 本人使用的是Codeblocks MinGW M ...

  9. LightOJ 1284 - Lights inside 3D Grid 概率/期望/二项式定理

    题意:给你一个长宽高为x,y,z的长方体,里面每个格子放了灯,再给你k次选取任意长方体形状的区块,对其内所有灯开或关操作,初始为关,问亮灯数量的期望值. 题解:首先考虑选取区块的概率,使某个灯在被选取 ...

  10. 耐心排序Patience Sorting

    这个排序的关键在建桶和入桶规则上 建桶规则:如果没有桶,新建一个桶;如果不符合入桶规则那么新建一个桶 入桶规则:只要比桶里最上边的数字小即可入桶,如果有多个桶可入,那么按照从左到右的顺序入桶即可 举个 ...