转自: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. 在oninitdialog后添加初始化变量

    需要 UpdateData(FALSE); 刷新界面 不然有时会不显示.

  2. Nginx +tomcat 实现负载均衡集群

    一.       工具   nginx-1.8.0 apache-tomcat-6.0.33 二.    目标   实现高性能负载均衡的Tomcat集群: 三.    步骤   1.首先下载Nginx ...

  3. 关于panda中dataframe的与&运算*(stackoverflow高票答案)

    85 down vote favorite 31 What explains the difference in behavior of boolean and bitwise operations ...

  4. JS练习:表格全选与全不选

    代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title ...

  5. Linux之网络文件共享服务(SamBa)

    SMB:Server Message Block服务器消息块,IBM发布,最早是DOS网络文 件共享协议 Cifs:common internet file system,微软基于SMB发布 SAMB ...

  6. 优化yum下载安装慢,不断换mirror

    不停地换mirror,为了解决这个问题,在网上搜了好多资料,总结出一个基于aliyun的mirror源 先检查:是否能正常上网,DNS是否正常,网关gw是否正常,若通过ping 不正常,则解决好网络, ...

  7. 基于supervisor秒级Laravel定时任务

    背景介绍 公司需要实现X分钟内每隔Y秒轮训某个接口,Linux自带的crontab貌似只精确到分钟,虽然可以到精确到秒,但是并不满足需求. 选型 公司项目都是 基于 Laravel 框架,所以这个没得 ...

  8. python爬虫15 | 害羞,用多线程秒爬那些万恶的妹纸们,纸巾呢?

    有时候 只是在人群中多看了一眼 就再也没办法忘掉那些容颜 小帅b在普通的一天 上着普通的网 不小心打开了一个不太普通的网站 https://www.mzitu.com/ 从此进入了不普通的一天 看着不 ...

  9. BZOJ 1601 USACO 2008 Oct. 灌水

    [Description] Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水 ...

  10. 查看Linux中自带的jdk ,设置JAVA_HOME

    在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos7是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java [r ...