mysql 存储过程 队列_mysql使用存储过程&函数实现批量插入

本文介绍了如何使用MySQL存储过程配合函数,创建批量插入数据的存储过程,包括往dept和emp表中插入随机生成的数据,展示了存储过程的创建与调用,适用于批量数据操作场景。
摘要由CSDN通过智能技术生成

写这边文章的目的,是想结合mysql 存储过程+函数完成一个批量删除的功能吧...正好也好加深下对procedure和function的熟练操作吧...

废话不多说,我就直接上表结构啦哈,如下:

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=utf8;

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=utf8;

执行以下命令查看mysql版本是否开启了函数功能

show variables like 'log_bin_trust_function_creators';

set global log_bin_trust_function_creators=1;

e1f577f36bc47592011f2b48262541a2.png

执行后再看是否生效

b74f12b12c506aafac7263a93d643f5a.png

创建函数(作用:生产随机字符串)

delimiter $$

create function rand_string(n int) returns varchar(255)

begin

declare chars_str varchar(100) default 'qwertyuiopasdfghjklzxcvbnm';

declare return_str varchar(255) default '';

declare i int default 0;

while i

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 $$

创建完后我们可以查看创建的函数:

6b2d568957c722dfd4bc30a05e31eb7b.png

接着我们来创建存储过程:

1:创建往emp表中插入数据的存储过程

delimiter $$

create procedure insert_emp(in start int(10),in max_num int(10))

begin

declare i int default 0;

/*把autocommit设置成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 $$

2:创建往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),rand_string(10),rand_string(8));

until i=max_num end repeat;

commit;

end $$

可以查看已经创建的procedure:

2572960e4b950cd1ee4e7f02d038703c.png

上面2个show create procedure请分开执行,我这里直截图就只显示一个procedure啦

那我们可以开始调用存储过程了

call insert_dept(1,100);//从deptno为1起插入100条随机生成数据

执行后我的部分数据如下:

d05fd5ef57e1f04ab20b75f28912c784.png

call insert_emp(1001,50000);//从empno为1001起插入50000条随机生成数据

执行后部分截图如下:

7ad521a91ed53ca45962e42f979fef08.png

至此,整个批量插入完成...关于存储过程和函数,手册上有更详细的介绍啦,我这里就不再赘述了吧....

MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法

在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

mysql三种带事务批量插入

原文:mysql三种带事务批量插入 c#之mysql三种带事务批量插入 前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到 ...

Mysql数据库实践操作之————批量插入数据(100万级别的数据)

第一种方法:使用insert into 插入 从Redis每次获取100条数据,根据条件去插入到Mysql数据库中: 条件: 如果当前队列中的值大于1000条,则会自动的条用该方法,该方法每次获取从队 ...

MySQL 避免重复数据的批量插入与批量更新

[转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...

MySQL创建存储过程/函数需要的权限

alter routine---修改与删除存储过程/函数 create routine--创建存储过程/函数 execute--调用存储过程/函数 下面有一篇介绍MySQL所有权限的博文 http:/ ...

c#之mysql四种带事务批量插入

前言 对于像我这样的业务程序员开发一些表单内容是家常便饭的事情,说道表单 我们都避免不了多行内容的提交,多行内容保存,自然要用到数据库,如果循环打扰我数据库,数据库也会觉得很累,从而增加数据库服务器压 ...

sql存储过程中循环批量插入

前几天有一个需求很头痛,部门是有上下级关系的,在给部门的经理赋予角色和权限的时候,通常我们都会认为假如经理A的部门是1,那么我给了他部门1 的管理权限,那么1的下级部门101,102,103 &quo ...

MySQL on duplicate key update 批量插入并更新已存在数据

业务上经常存在一种现象,需要批量往表中插入多条数据,但在执行过程中,很可能因为唯一键冲突,而导致批量插入失败.因此需要事先判断哪些数据是重复的,哪些是新增的.比较常用的处理方法就是找出已存在的数据,并 ...

mysql存储过程命令行批量插入N条数据命令

原文:http://blog.csdn.net/tomcat_2014/article/details/53377924 delimiter $$ create procedure myproc () ...

随机推荐

call函数心得

今天深深受项目组一老大哥深深的鄙视了一把,在用call的时候,因不理解导致函数之间无法正常调用 function A(){ B.call(XXX,a,b,c); }; function B(a,b,c ...

LRU缓存算法

http://blog.csdn.net/beiyeqingteng/article/details/7010411 http://blog.csdn.net/wzy_1988/article/det ...

画图------Brush

SolidBrush继承自Brush,表示单色的笔刷.Brushes 类则继承自System.Object.它提供了一些标准颜色的画笔,包含静态的只读属性,这些属性返回由属性名指示的颜色的 Brush ...

Hibernate框架单向多对一关联映射关系

建立多对一的单向关联关系    Emp.java            private Integer empNo //员工编号            private String empName / ...

JavaScript系列----作用域链和闭包

1.作用域链 1.1.什么是作用域 谈起作用域链,我们就不得不从作用域开始谈起.因为所谓的作用域链就是由多个作用域组成的.那么, 什么是作用域呢? 1.1.1作用域是一个函数在执行时期的执行环境. 每 ...

OpenCV处理视频序列的类

代码出处,opencv2 cookbook: /*--------------------------------------------------------------------------- ...

Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress(转发)

原文 http://cloud.51cto.com/art/201804/570386.htm Kubernetes的三种外部访问方式:NodePort.LoadBalancer和Ingress 最近 ...

关于java异常try catch finally的一道题

这两天,有人咨询我一道关于java基础的题,具体代码如下: private static int m1() { int a = 10; try { a = 20; throw new RuntimeE ...

POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理)

POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理) 题意分析 不妨设日期为x,根据题意可以列出日期上的方程: 化简可得: 根据中国剩余定理求解即可. 代码总览 #include & ...

SOE 中调用第三方dll

一.简介 在利用soe实现server的扩展的时候,有些时候,需要调用第三方的dll库.官网中给出了明确的说明,soe中是可以添加第三方的dll文件,但是一直没有测试.按照官方的步骤应该是一个非常的简 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值