利用存储过程插入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 ...
随机推荐
- CSS——盒子
CSS中的盒子具有以下几个种重要的属性: 1.border(边框) :盒子的厚度 2.padding(内边距):盒子内容距离盒子边框的距离 3.margin(外边距):盒子边框与其他的盒子的距离
- linux杀掉某个进程的脚本
https://www.cnblogs.com/zeng1994/p/13a2c5a28e55dd3abc2c75a4fb80371a.html awk的说明: https://www.cnblogs ...
- Ubuntu 18.04 安装chrome浏览器
参考 https://blog.csdn.net/cyem1/article/details/86297197 一分钟安装教程! 1.将下载源加入到系统的源列表(添加依赖) sudo wget htt ...
- linux中快速查找文件
在使用linux时,经常需要进行文件查找.其中查找的命令主要有find和grep.两个命令是有区的. 区别:(1)find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访 ...
- Async/await语法糖实现(Generator)
// generator也是一种迭代器(Iterator) 有next方法,并返回一个对象{value:...,done:...} function run(generatorFunction) { ...
- 洛谷——P2342 叠积木
P2342 叠积木 题目大意: 给你一堆积木,排成一行,初始时每对积木都只有一个,支持两种操作 第一种是移动操作,格式为“移动X到Y的上面”.X和Y代表两块积木的编号,意思是将X所的那堆积 ...
- Luogu 2951 捉迷藏Hide and Seek
P2951 [USACO09OPEN]捉迷藏Hide and Seek 题目描述 Bessie is playing hide and seek (a game in which a number o ...
- [luogu2148 SDOI2009] E&D (博弈论)
传送门 Solution 我们知道当SG不为0则先手必胜,然后就可以打表了 ̄▽ ̄ Code //By Menteur_Hxy #include <cmath> #include <c ...
- Excel 2010/2013/2016在鼠标右键新建xls或xlsx文件后,打开报错“无法打开文件”“文件格式或文件扩展名无效”
近段时间,陆续有两个同事先后出现同样的问题(在Excel多个版本都可能出现),问题描述: 当用鼠标右键在任意文件夹或电脑桌面“新建”→“ Microsoft Excel 工作表”,再用鼠标双击打开这个 ...
- sgu 176 有源汇有上下界的最小流模板题
/*参考博文:http://hi.baidu.com/dragon_eric123/item/82e259200ece744046996282 有上下界的有源最小流 */ #include<st ...