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

部门表:

  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. 【转】TCP拥塞控制,慢启动、拥塞避免、快重传以及快恢复

    转自:http://blog.csdn.net/yusiguyuan/article/details/22847787 注:本文绝大部分是来自转载的博客,还补充了少量内容. 一.TCP的拥塞控制 拥塞 ...

  2. HDOJ.1113 Word Amalgamation(map)

    Word Amalgamation 点我挑战题目 点我一起学习STL-MAP 题意分析 给出字典.之后给出一系列======乱序======单词,要求你查字典,如过这个乱序单词对用有多个有序单词可以输 ...

  3. python高效学习路线图

  4. 剑桥offer(51~60)

    51.题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode { ...

  5. JavaScript关键字return的用法

    return 语句从当前函数退出,并从那个函数返回一个值. 语法: 1 return[()[expression][]]; 可选项 expression 参数是要从函数返回的值.如果省略,则该函数不返 ...

  6. Change FZU - 2277 毒瘤啊 毒瘤题目

    There is a rooted tree with n nodes, number from 1-n. Root’s number is 1.Each node has a value ai. I ...

  7. springboot的application.properties与.yml的区别

    现在我们的application.properties文件内容是: server.port=8090 server.session-timeout=30 server.context-path= se ...

  8. zookeeper源码分析之leader选举

    zookeeper提供顺序一致性.原子性.统一视图.可靠性保证服务zookeeper使用的是zab(atomic broadcast protocol)协议而非paxos协议zookeeper能处理并 ...

  9. Java设计模式の工厂模式

    -------------------------------------------------------- 目录:  一.序言 二.简单工厂模式 三.工厂方法模式 四.简单工厂和工厂方法模式的比 ...

  10. Mabatis(2) 全局配置文件

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...