转自:https://www.aliyun.com/jiaocheng/1396184.html

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

部门表:

  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

开启二进制日志:

通过

show variables like 'log_bin_trust_function_creators'

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

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

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

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 $$

调用上边的两个插入函数

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条数据,

mysql> call insert_emp(100001,500000);
这样就实现了大量数据的插入。

利用存储过程插入50W+数据的更多相关文章

  1. ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK

    看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...

  2. ASP.NET MVC + EF 利用存储过程读取大数据

    ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...

  3. Mysql利用存储过程插入400W条数据

    CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(20) NO ...

  4. Mysql利用存储过程插入500W条数据

    比如插入1000W数据,不建议一次性插入,比如一次插入500W,分批插入. 创建表 /*部门表*/ CREATE TABLE dept( id INT UNSIGNED PRIMARY KEY AUT ...

  5. 利用 Python 插入 Oracle 数据

    # coding=utf-8 ''''' Created on 2020-01-05 @author: Mr. Zheng ''' import json; import urllib2 import ...

  6. SQL 利用存储过程实现对表数据有则更新无则添加(转)

    初学存储过程,发现这篇文章简单易懂,特意转载,地址 http://blog.csdn.net/luotuomianyang/article/details/52013144 如果某一操作包含大量的T- ...

  7. 原!mysql存储过程 批量导入数据

    mysql需要导入某前缀例如12345为前缀的,后缀扩展2位 即00-99. 利用存储过程插入数据. DROP PROCEDURE IF EXISTS insert_popsms_code;DELIM ...

  8. mysql用存储过程插入百万条数据, 及查询优化

    查看所有存储过程: show procedure status; 查看详细存储过程 ptest: show create procedure ptest; 存储过程插入数据: create table ...

  9. [ios]利用alertView 插入数据都数据库。笔记

    利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...

随机推荐

  1. 顺序表查找及其优化(Java)

    顺序表查找(线性查找): private static void Ordersearch(int[] arr,int num) { for (int i = 0; i < arr.length; ...

  2. JavaScript学习书签

    JavaScript常用正则表达式 闭包 JavaScipt DOM 变量提升

  3. OpenGL第23-26小结

    到后面代码相对而言比较复杂了,因为没有系统的看红宝书(就跟字典一样,兴趣缺缺),很多操作的步骤比较迷糊. 23讲讲解了如何将环境纹理贴在球体.圆柱体等非矩形物体表面,从而达到一个反射周围景色的效果(恩 ...

  4. 【技术累积】【点】【java】【25】Orderd

    基础概念 Orderd是spring core中定义的一个接口,使用它以及相关的Comparator和@Order注解,可以实现对元素的排序. @Order 直接先说下@Order注解吧,使用场景较多 ...

  5. 06--ubuntu的sqlite安装

    知道学习嵌入式技术,数据库是必须懂的,看的书上嵌入式的教程都在用,看来我是非学不可了,下面就简单的记录一下我在Ubuntu 12.04系统上安装 SQLite 的过程以及使用. 相关阅读: SQLit ...

  6. Operation Queues 面向对象的封装

    Operation Queues An operation queue is the Cocoa equivalent of a concurrent dispatch queue and is im ...

  7. Review:Microbiota, metagenome, microbiome傻傻分不清

    Microbiota 微生物群   微生物群是指研究动植物体上共生或病理的微生物生态群体.微生物群包括细菌.古菌.原生动物.真菌和病毒.研究表明其在宿主的免疫.代谢和激素等方面非常重要.近义词Micr ...

  8. BZOJ 2626: JZPFAR KDtree + 堆

    Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000000000 #define mid ((l ...

  9. 模态框(layer)

    推荐一个好看的模态框(layer)   地址:http://layer.layui.com/ 相应列子及配置  全部来自于官网,可直接访问官网学习了解. //信息框-例1 layer.alert('见 ...

  10. python round()模块

    Python3的round()函数四舍五入取整时,采用最近偶数原则 >>> round(1.5)2>>> round(2.5)2>>> round ...