批量插入数据

存储过程也有返回值,存储过程有一个或多个返回值,函数有且只有一个返回值

往表里插入1000w数据

1.建表

create database bigData;
use bigData;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;

2.设置参数log_bin_trust_function_creators

由于在做大数据插入时,mysql自身会产生一个错,要设置一个参数,二进制日志这样的一个开启的功能模块

创建函数,假如报错:This function has none of-DETERMINISTIC....
#由于开启过慢查询日志,因为我们开启了bin-log,我们就必须为我们的function指定一个
show variables like 'log_bin_trust_function_creators';
set global log_bin_trust_function_creators=1;
#这样添加了参数以后,如果mysqld重启,上述参数又会消失,永久方法:
windows下my.ini[mysqld]加上  log_bin_trust_function_creators=1
linux下letc/my.cnf下my.cnf[mysqld]加上  log_bin_trust_function_creators=1

3.创建随机函数,保证每条数据都不同

  • 随机产生字符串
  • 随机产生部门编号
//函数:随机产生字符串
delimiter $$
create function ran_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
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 $$
create function rand_num() returns int(5)
begin
declare i int default 0;
set i=floor(100+rand()*10);
return i;
end $$# 如果要删除函数,则执行:drop function rand_str

4.创建存储过程

  • 创建往emp表中插入数据的存储过程
  • 创建往dept表中插入数据的存储过程
#存储过程:创建往emp表中插入数据的存储过程
delimiter $$ :
create procedure insert_emp(in start int(10),in max_num int(10))
begin
declare i int default 0;
set autocommit = 0;        #设置自动提交为0,就不用每插入一条数据就commit,反复commit影响执行效率
repeat
set i = i+1;
insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values((start+i),ran_string(6),'salesman',0001,curdate(),2000,400,rand_num());
until i=max_num
end repeat;
commit;     #自动一次性提交
end $$#删除
# DELIMITER;
# drop PROCEDURE insert_emp;#存储过程:创建往dept表中插入数据的存储过程
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),ran_string(10),ran_string(8));
until i=max_num
end repeat;
commit;
end $$#删除
#DELIMITER;
#drop PROCEDURE insert_dept;

5.调用存储过程

delimiter ; #先恢复成以;结束
CALL insert_dept(100,10);
CALL insert_emp(100,5);

当初如大量数据时,用时就会很多。select可能时间就比较长,这时候如果开了慢查询日志,超时的sql语句就会被记录到日志中

批量删除某个表上的索引

DELIMITER $$
CREATE PROCEDURE `proc_drop_index`(dbname VARCHAR(200),tablename VARCHAR(200))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE ct INT DEFAULT 0;
DECLARE _index VARCHAR(200) DEFAULT '';
DECLARE _cur CURSOR FOR SELECT index_name FROM information_schema.STATISTICS WHERE
table_schema=dbname AND table_name=tablename AND seq_in_index=1 AND index_name <>'PRIMARY' ;
DECLARE CONTINUE HANDLER FOR NOT FOUND set done=2 ;
OPEN _cur;
FETCH _cur INTO _index;
WHILE _index<>'' DO
SET @str = CONCAT("drop index ",_index," on ",tablename );
PREPARE sql_str FROM @str ;
EXECUTE sql_str;
DEALLOCATE PREPARE sql_str;
SET _index='';
FETCH _cur INTO _index;
END WHILE;
CLOSE _cur;
END $$#执行
CALL proc_drop_index("dbname","tablename");

MYSQL-批量插入数据相关推荐

  1. Mysql批量插入数据问题解决和优化

    Mysql批量插入数据问题解决和优化 一.问题描述 项目中mysql批量插入大概50000左右数据,使用事务和批量,但是速度依旧很慢,大约60s左右,迫切希望改进这个问题. 二.问题原因 尽管是批量a ...

  2. MySQL批量插入数据的几种方法

    最近公司要求测试数据库的性能,就上网查了一些批量插入数据的代码,发现有好几种不同的用法,插入同样数据的耗时也有区别 别的先不说,先上一段代码与君共享 方法一: package com.bigdata; ...

  3. MySQL 批量插入数据,单次插入多少条数据效率最高

    文章目录 一.前言 二.批量插入前准备 1.插入到数据表的字段 2.计算一行字段占用的空间 3.在数据里做插入操作的时候,整体时间的分配 三.批量插入数据测试 1.SQL语句的大小限制 2.查看服务器 ...

  4. MySQL 批量插入数据,一次插入多少行数据效率最高?

    一.前言 我们在操作大型数据表或者日志文件的时候经常会需要写入数据到数据库,那么最合适的方案就是数据库的批量插入.只是我们在执行批量操作的时候,一次插入多少数据才合适呢?假如需要插入的数据有百万条,那 ...

  5. MySQL(一) Python操控mysql批量插入数据

    在Python中,通过pymysql模块,编写简短的脚本,即方便快捷地控制MySQL数据库 一.连接数据库 使用的函数:pymysql.connect 语法:db=pymysql.connect(ho ...

  6. mysql批量插入数据的函数和存储过程

    -- 创建函数前,设置 set global log_bin_trust_function_creators=TRUE; -- 新建函数-产生随机的字符串 drop function if exist ...

  7. mysql 批量插入数据

    1.创建表 CREATE TABLE `user` (`id` int(50) NOT NULL,`username` varchar(255) DEFAULT NULL,`sex` varchar( ...

  8. python mysql批量insert数据_使用python往mysql批量插入数据时,报错not all arguments converted...

    我用这段命令可以往mysql数据库插入数据 insert into moderation_task(id, media_id, user_id, media_url_or_path, media_ti ...

  9. mysql 批量插入数据方法_mysql大批量插入数据的4种方法示例

    前言 本文主要给大家介绍了关于mysql大批量插入数据的4种方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法一:循环插入 这个也是最普通的方式,如果数据量不是很大,可以使用, ...

  10. PHP向数据库循环插入数据,php实现向mysql批量插入数据

    现在有这样一个表,我们想往这个表里面插入大量数据该如何实现呢?CREATE TABLE IF NOT EXISTS `user_info` ( `id` int(11) NOT NULL AUTO_I ...

最新文章

  1. 17岁高中生独立开发全球最火疫情追踪网站
  2. jQuery常用技巧
  3. console对象的方法log()、info()、warn()、error()区别及几个实用的方法
  4. Django(part19)--Django中的应用
  5. jzoj4673,CF578D-LCS again【统计,字符串,容斥】
  6. 从新获取jar_hadoop3.0新特性总结
  7. 掏出来的“耳屎经济”
  8. xml TO json(非递归实现)
  9. uniapp前端处理接口返回一整个html格式
  10. Mybatis3.4.x技术内幕(十七):Mybatis之动态Sql设计原本(上)
  11. 决定论的科学家认为,自我是大脑的随附现象,自由意志是一种幻觉
  12. SQL入门经典 第一章
  13. java 汉字排序_Java中文排序
  14. 使用61850网关实现modbus和电力iec61850协议的转换
  15. Java责任链模式及异步责任链
  16. 计算机上的按键名有哪些,电脑键盘上各个按键名称与功能作用
  17. 「日历订阅」全网首发2023年中国法定节假日
  18. unlink快速入门
  19. kali源代码简单说明
  20. GAN (Generative Adversarial Nets 生成对抗网络)

热门文章

  1. 如何修改github上的头像
  2. 100+个图像数据集
  3. hive日期函数各种用法
  4. 【WordPress】百度收录查询和显示WordPress插件(自定义栏目优化版)
  5. 前端学习 -- Css -- 字体的几个属性学习
  6. 企鲸客SCRM和微盛SCRM管理系统的区别
  7. python画散点图和折线图
  8. 苹果8.1系统无服务器,苹果正式推出iOS8.1系统更新
  9. 信息滤波、UD滤波、遗忘滤波和自适应滤波
  10. 《佛密诸事》第五章 罗汉五密说