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

部门表:

  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. 【以前的空间】poj 2288 Islands and Bridges

    一个不错的题解 : http://blog.csdn.net/accry/article/details/6607703 这是一道状态压缩.每个点有一个值,我们最后要求一个最值sum.sum由三部分组 ...

  2. POJ3666:Making the Grade——题解

    http://poj.org/problem?id=3666 题目大意:给n个数,每次操作可使一个数+1或-1,求最小操作数使得序列不下降或不上升. —————————————————————— 思路 ...

  3. POJ3498:March of the Penguins——题解

    最近的题解的故事背景割. 题目: 描述 在靠近南极的某处,一些企鹅站在许多漂浮的冰块上.由于企鹅是群居动物,所以它们想要聚集到一起,在同一个冰块上.企鹅们不想把自己的身体弄湿,所以它们在冰块之间跳跃, ...

  4. LOJ2587:[APIO2018]铁人两项——题解

    https://loj.ac/problem/2587#submit_code (题面来自LOJ) 考试时候发觉树很可做,并且写了一个dp骗到了树的分. 苦于不会圆方树……现在回来发现这题还是很可做的 ...

  5. caffe数据集——LMDB

    LMDB介紹 Caffe使用LMDB來存放訓練/測試用的數據集,以及使用網絡提取出的feature(為了方便,以下還是統稱數據集).數據集的結構很簡單,就是大量的矩陣/向量數據平鋪開來.數據之間沒有什 ...

  6. OopenCV复习及函数深入理解(轮廓查询及绘图)

    核心函数:(后面标明号的,下面有解析) int cvFindContours(Iplimage* img,//这是输入函数,必须是8bit,单通道的图像---1 CvMemStorage* stora ...

  7. vue-transition-animation

    <!Doctype> <html> <head> <meta charset="utf-8"> <meta name=&quo ...

  8. Stick footers布局总结

    一.Sticky footers解释 在网页设计中,Sticky footers设计是最古老和最常见的效果之一,大多数人都曾经经历过.它可以概括如下:如果页面内容不够长的时候,页脚块粘贴在视窗底部:如 ...

  9. 其他:OI竞赛中的文件操作

    本文介绍三种方法进行文件输入输出,都非常实用 第一种方法是采用重定向的形式进行输入输出,很方便 freopen("input.txt","r",stdin); ...

  10. jsp 内置对象二

    1.什么是session ? (1)session 表示客户端与服务器的一次回话. 2)Web中的session指的是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网 ...