Mysql利用存储过程插入500W条数据
比如插入1000W数据,不建议一次性插入,比如一次插入500W,分批插入。
创建表
/*部门表*/
CREATE TABLE dept(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, /*id*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT , /*编号*/
dname VARCHAR() NOT NULL DEFAULT "",/*名称*/
loc VARCHAR() NOT NULL DEFAULT "" /*地点*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*EMP雇员表*/
CREATE TABLE emp(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, /*id*/
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT ,/*编号*/
ename VARCHAR() NOT NULL DEFAULT "",/*名字*/
job VARCHAR() NOT NULL DEFAULT "",/*工作*/
mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT ,/*是哪个及编号*/
hiredate DATE NOT NULL,/*入职时间*/
sal DECIMAL(,) NOT NULL,/*薪水*/
comm DECIMAL(,) NOT NULL,/*红利*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT /*部门编号*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
/*工资级别表*/
CREATE TABLE salgrade(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT ,
losal DECIMAL(,) NOT NULL,
hisal DECIMAL(,) NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
#定义一个新的命令结束符
delimiter $$
创建函数
Mysql在插入大量数据的时候,Mysql自身会报错,我们需要设置参数一个二进制日志开启的功能模块。
比如创建函数的时候,会报错
ERROR (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declar
假如开启了慢查询日志,因为开启了bin-log,那么我们必须为function指定一个参数
MySQL [test_db]> show variables like 'log_bin_trust_function_creators'; //注意命令结束符
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
set global log_bin_trust_function_creators = ; //注意命令结束符
如果命令方式设定参数,mysql重启还会失效,想要永久有效必须修改my.cnf文件
[mysqld]
log_bin_trust_function_creators =
好了,下面开始创建函数
#rand_string(n INT) rand_string 是函数名(n INT) //该函数传参一个整数
create function rand_string(n INT)
returns varchar()
begin
declare chars_str varchar() default
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
declare return_str varchar() default '';
declare i int default ;
while i < n do
set return_str=concat(return_str,substring(chars_str,floor(+rand()*),));
set i = i +;
end while;
return return_str;
end $$
//生成部门号函数
create function rand_num( )
returns int()
begin
declare i int default ;
set i = floor(+rand()*);
return i;
end $$
创建存储过程
create procedure insert_emp(in start int(),in max_num int())
begin
declare i int default ;
#set autocommit = //把autocommit设置成0,这样可以只提交一次,否则。。。。。
set autocommit = ;
repeat
set i = i +;
insert into emp (empno, ename,job,mgr,hiredate,sal,comm,deptno) values ((start+i),rand_string(),'SALESMAN',,curdate(),,,rand_num());
until i = max_num
end repeat;
commit;
end $$
修改命令结束符后,调用刚刚写好的函数,从100001号开始,产生5000000记录,这里一次插入了
call insert_emp(,);
Mysql利用存储过程插入500W条数据的更多相关文章
- Mysql利用存储过程插入400W条数据
CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(20) NO ...
- mysql用存储过程插入百万条数据, 及查询优化
查看所有存储过程: show procedure status; 查看详细存储过程 ptest: show create procedure ptest; 存储过程插入数据: create table ...
- mysql一次插入多条数据
mysql一次插入多条数据: INSERT INTO hk_test(username, passwd) VALUES ('qmf2', 'qmf2'),('qmf3', 'qmf3'),('qmf4 ...
- MySQL往表里插入千条数据 存储过程
工作中遇到的问题,先记录一下,方便以后查看 存在两张表,user表和friend表 user表部分字段,如上图 friend表部分字段,如上图 往friend表插入千条数据,friend表中的user ...
- MySql LAST_INSERT_ID 【插入多条数据时】
LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generat ...
- 批处理数据库(利用batch插入2w条数据)
public class Demo02Batch { /* * 批处理 */ public static void main(String[] args) { Connection conn=null ...
- mysql利用存储过程批量插入数据
最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: [sql]view plaincopy CR ...
- mysql命令行批量插入100条数据命令
先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...
- WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实 ...
随机推荐
- nginx中location、rewrite用法总结
一.location用法总结 location可以把不同方式的请求,定位到不同的处理方式上. 1.location的用法 location ~* /js/.*/\.js 以 = 开头,表示精确匹配:如 ...
- CCCC L2-001 紧急救援 floyd改的dijkstra模板 (记录路径) L3 天梯地图
https://www.patest.cn/contests/gplt/L2-001 题解:求最短路的条数,并输出点的权值最大的路径,用priority_queue会wa两个点,原因不明. 于是又学了 ...
- 【Python算法】遍历(Traversal)、深度优先(DFS)、广度优先(BFS)
图结构: 非常强大的结构化思维(或数学)模型.如果您能用图的处理方式来规范化某个问题,即使这个问题本身看上去并不像个图问题,也能使您离解决问题更进一步. 在众多图算法中,我们常会用到一种非常实用的思维 ...
- 数据库管理系统的ACID特性
数据库管理系统(DBMS)的事务都遵循着四种标准规格的约定.将这四种特性的首字母结合起来就统称为ACID特性.这些约定是所有DBMS都必须遵守的规则. 原子性 原子性是指在事务结束时,其中所包含的更新 ...
- 线性参照,M值的相关测试
怎样使用普通线要素获取带M值的线要素 怎样查看线要素各个折点上的M值,怎样导出为一张表 线性参照:http://resources.arcgis.com/zh-cn/help/main/10.2/in ...
- HDU5033 building 单调栈+计算几何
正解:单调栈 解题报告: 哇生气辽QAQ本来打了半天feel good都快调出来了然后说换题了QAQ(所以可能那题的代码会过一阵子再放上来了QAQ 不过还是大爆手速打了一通拿到首杀了嘻嘻 美滋滋辽 然 ...
- Java-SpringMvc-@ResponseBody返回中文字符串乱码
第一种.注解 @RequestMapping(value = "/test.do", method = {RequestMethod.GET},produces = "t ...
- GOLANG错误处理最佳方案errors wrap, Defer, Panic, and Recover
Simple error handling primitives: https://github.com/pkg/errors Defer, Panic, and Recover: ...
- java调用存储过程mysql
在java中调用带返回值的存储过程的实现 直接上代码: DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PROCEDURE `t ...
- js数组之迭代器方法
迭代器方法:对数组中的每一个元素应用一个函数,可以返回一个值,一组值或者一个新的数组.说的什么啊这是,根本听不懂.实践 不生成新数组的迭代器的方法: <html> <head> ...