利用存储过程插入50W+数据
转自:https://www.aliyun.com/jiaocheng/1396184.html
首先,建立部门表和员工表:
部门表:
- create table dept(
- id int unsigned primary key auto_increment,
- deptno mediumint unsigned not null default 0,
- dname varchar(20) not null default "",
- loc varchar(13) not null default ""
- )ENGINE=INNODB DEFAULT CHARSET=GBK
员工表:
- create table emp(
- id int unsigned primary key auto_increment,
- empno mediumint unsigned not null default 0,
- ename varchar(20) not null default "",
- job varchar(9) not null default "",
- mgr mediumint unsigned not null default 0,
- hiredate date not null,
- sal decimal(7,2) not null,
- comm decimal(7,2) not null,
- deptno mediumint unsigned not null default 0
- )ENGINE=INNODB DEFAULT CHARSET=GBK
开启二进制日志:
通过
show variables like 'log_bin_trust_function_creators'
可以看到默认的二进制日志时关闭的
- Variable_name |Value |
- --------------------------------|------|
- log_bin_trust_function_creators |OFF |
通过下面的命令进行设置:
set global log_bin_trust_function_creators=1
- Variable_name |Value |
- --------------------------------|------|
- log_bin_trust_function_creators |ON |
1.创建一个生成随机字符串的函数:
- DELIMITER $$
- create FUNCTION rand_string(n int) returns varchar(255)
- BEGIN
- declare chars_str varchar(100) default 'abcdefghijklmnoprstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
- declare return_str varchar(255) default '';
- declare i int default 0;
- while i<n DO
- set return_str=CONCAT(return_str,substring(chars_str,floor(1+rand()*52),1));
- set i=i+1;
- end while;
- return return_str;
- END $$
通过DELIMITER定义mysql语句的结束符,因为函数中多处有分号,如果不修改掉默认的结束符;那么函数将会产生错误
随后,创建生成随机数的函数:
- delimiter $$
- create function rand_num() RETURNS int(5)
- begin
- declare i int default 0;
- set i=floor(100+rand()*10);
- return i;
- end $$
插入员工表函数:
- delimiter $$
- create procedure insert_emp(IN START INT(10),IN max_num int(10))
- begin
- declare i int default 0;
- set autocommit=0;
- repeat
- set i=i+1;
- insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values((start+i),rand_string(6),'SALESMAN',0001,CURDATE(),2000,400,rand_num());
- until i=max_num
- end repeat;
- commit;
- end $$
插入部门的函数:
- delimiter $$
- create procedure insert_dept(IN START INT(10),IN max_num INT(10))
- begin
- declare i int default 0;
- set autocommit=0;
- repeat
- set i=i+1;
- insert into dept(deptno,dname,loc) values((start+i),rand_string(10),rand_string(8));
- until i=max_num
- end repeat;
- commit;
- end $$
- end $$
调用上边的两个插入函数
call insert_dept(100,10);
- +----+--------+------------+----------+
- | id | deptno | dname | loc |
- +----+--------+------------+----------+
- | 1 | 101 | OVnDatOMsA | BbGYWOaO |
- | 2 | 102 | PHQffkLYGl | mEgXmxza |
- | 3 | 103 | IljlEhcRXn | xvJjUSGz |
- | 4 | 104 | EwuFUElxBk | zNrtSdVl |
- | 5 | 105 | vtHaksNIb | mdGUBVar |
- | 6 | 106 | FamifbRZyr | ljmJDQso |
- | 7 | 107 | tYLKrAAbHd | ziuuQRKZ |
- | 8 | 108 | SpXNXzEvmc | ByJZUzNo |
- | 9 | 109 | hXlpSoXPfj | HDUNcbT |
- | 10 | 110 | sfBoRlLUlA | OtCCdPIU |
- +----+--------+------------+----------+
在员工表中插入50W条数据,
mysql> call insert_emp(100001,500000);
这样就实现了大量数据的插入。
利用存储过程插入50W+数据的更多相关文章
- ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK
看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...
- ASP.NET MVC + EF 利用存储过程读取大数据
ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...
- Mysql利用存储过程插入400W条数据
CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(20) NO ...
- Mysql利用存储过程插入500W条数据
比如插入1000W数据,不建议一次性插入,比如一次插入500W,分批插入. 创建表 /*部门表*/ CREATE TABLE dept( id INT UNSIGNED PRIMARY KEY AUT ...
- 利用 Python 插入 Oracle 数据
# coding=utf-8 ''''' Created on 2020-01-05 @author: Mr. Zheng ''' import json; import urllib2 import ...
- SQL 利用存储过程实现对表数据有则更新无则添加(转)
初学存储过程,发现这篇文章简单易懂,特意转载,地址 http://blog.csdn.net/luotuomianyang/article/details/52013144 如果某一操作包含大量的T- ...
- 原!mysql存储过程 批量导入数据
mysql需要导入某前缀例如12345为前缀的,后缀扩展2位 即00-99. 利用存储过程插入数据. DROP PROCEDURE IF EXISTS insert_popsms_code;DELIM ...
- mysql用存储过程插入百万条数据, 及查询优化
查看所有存储过程: show procedure status; 查看详细存储过程 ptest: show create procedure ptest; 存储过程插入数据: create table ...
- [ios]利用alertView 插入数据都数据库。笔记
利用alertView 插入数据都数据库 -(void)addItemToList { UIAlertView *alter=[[UIAlertViewalloc]initWithTitle:@&qu ...
随机推荐
- 顺序表查找及其优化(Java)
顺序表查找(线性查找): private static void Ordersearch(int[] arr,int num) { for (int i = 0; i < arr.length; ...
- JavaScript学习书签
JavaScript常用正则表达式 闭包 JavaScipt DOM 变量提升
- OpenGL第23-26小结
到后面代码相对而言比较复杂了,因为没有系统的看红宝书(就跟字典一样,兴趣缺缺),很多操作的步骤比较迷糊. 23讲讲解了如何将环境纹理贴在球体.圆柱体等非矩形物体表面,从而达到一个反射周围景色的效果(恩 ...
- 【技术累积】【点】【java】【25】Orderd
基础概念 Orderd是spring core中定义的一个接口,使用它以及相关的Comparator和@Order注解,可以实现对元素的排序. @Order 直接先说下@Order注解吧,使用场景较多 ...
- 06--ubuntu的sqlite安装
知道学习嵌入式技术,数据库是必须懂的,看的书上嵌入式的教程都在用,看来我是非学不可了,下面就简单的记录一下我在Ubuntu 12.04系统上安装 SQLite 的过程以及使用. 相关阅读: SQLit ...
- Operation Queues 面向对象的封装
Operation Queues An operation queue is the Cocoa equivalent of a concurrent dispatch queue and is im ...
- Review:Microbiota, metagenome, microbiome傻傻分不清
Microbiota 微生物群 微生物群是指研究动植物体上共生或病理的微生物生态群体.微生物群包括细菌.古菌.原生动物.真菌和病毒.研究表明其在宿主的免疫.代谢和激素等方面非常重要.近义词Micr ...
- BZOJ 2626: JZPFAR KDtree + 堆
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000000000 #define mid ((l ...
- 模态框(layer)
推荐一个好看的模态框(layer) 地址:http://layer.layui.com/ 相应列子及配置 全部来自于官网,可直接访问官网学习了解. //信息框-例1 layer.alert('见 ...
- python round()模块
Python3的round()函数四舍五入取整时,采用最近偶数原则 >>> round(1.5)2>>> round(2.5)2>>> round ...