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

部门表:

  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. hdu ACM Steps Section 1 花式A+B 输入输出格式

    acm与oi很大的一个不同就是在输入格式上.oi往往是单组数据,而acm往往是多组数据,而且题目对数据格式往往各有要求,这8道a+b(吐槽..)涉及到了大量的常用的输入输出格式.https://wen ...

  2. POJ1269:Intersecting Lines——题解

    http://poj.org/problem?id=1269 题目大意:给四个点,求前两个点所构成的直线和后两个点所构成的直线的位置关系(平行,重合,相交),如果是相交,输出交点坐标. ——————— ...

  3. BZOJ2730:[HNOI2012]矿场搭建——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2730 https://www.luogu.org/problemnew/show/P3225 听说 ...

  4. [Leetcode] Maximum depth of binary tree二叉树的最大深度

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  5. 利用caffe的solverstate断点训练

    你可以从系统 /tmp 文件夹获取,名字是什么 caffe.ubuntu.username.log.INFO.....之类 ====================================== ...

  6. Codeforces Round #398 (Div. 2) A B C D 模拟 细节 dfs 贪心

    A. Snacktower time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  7. 裸机配置C语言运行环境

    C语言程序的执行需要栈的支持.部分soc未初始化栈的情况下调用C语言程序会发生错误. start.S中一共配置了看门狗,svc栈,icache. 在x210中看门狗默认关闭,svc栈默认开启,icah ...

  8. lightoj 1007 - Mathematically Hard 欧拉函数应用

    题意:求[a,b]内所有与b互质个数的平方. 思路:简单的欧拉函数应用,由于T很大 先打表求前缀和 最后相减即可 初次接触欧拉函数 可以在素数筛选的写法上修改成欧拉函数.此外本题内存有限制 故直接计算 ...

  9. 【Foreign】咏叹 [模拟退火]

    咏叹 Time Limit: 100 Sec  Memory Limit: 256 MB Description 有n根木棍,第i根长度为ai.你要贴着墙围出一个矩形区域,木棍围成的矩形边缘必须平行或 ...

  10. 【BZOJ】3329: Xorequ

    [题意]给定方程x^3x=2x,求<=x和<=2^x的满足方程的正整数个数. [算法]数位DP,矩阵快速幂 [题解]异或相当于不进位加法. 移项得,x^2x=3x,又因为x+2x=3x,所 ...