mysql使用存储过程&函数实现批量插入
写这边文章的目的,是想结合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;
执行后再看是否生效
创建函数(作用:生产随机字符串)
- 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<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 $$
创建完后我们可以查看创建的函数:
接着我们来创建存储过程:
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:
上面2个show create procedure请分开执行,我这里直截图就只显示一个procedure啦
那我们可以开始调用存储过程了
- call insert_dept(1,100);//从deptno为1起插入100条随机生成数据
执行后我的部分数据如下:
- call insert_emp(1001,50000);//从empno为1001起插入50000条随机生成数据
执行后部分截图如下:
至此,整个批量插入完成...关于存储过程和函数,手册上有更详细的介绍啦,我这里就不再赘述了吧....
mysql使用存储过程&函数实现批量插入的更多相关文章
- 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 () ...
随机推荐
- 华为SSH认证配置
[设备型号]华为switch-S5700s ————1: [SW1] rsa/dsa local-key-pair create #创建本地密钥对 The key name will be: SW1_ ...
- VSCode插件开发全攻略(八)代码片段、设置、自定义欢迎页
更多文章请戳VSCode插件开发全攻略系列目录导航. 代码片段 代码片段,也叫snippets,相信大家都不陌生,就是输入一个很简单的单词然后一回车带出来很多代码.平时大家也可以直接在vscode中创 ...
- 省钱版----查找 IoT 设备TTL线序__未完待续
作者:仙果 原文来自:省钱版—-查找 IoT 设备TTL线序 省钱版----查找 IoT 设备TTL线序__未完待续 缘由 在IoT固件调试分析的过程中,建议首先在IoT设备的板子上焊接调试线,这是能 ...
- Not posting notification with icon==0问题解决
问题:E/NotificationService: Not posting notification with icon==0: Notification(pri=0 contentView=null ...
- HTTP 协议常见首部字段
首部字段 1.HTTP协议的请求和响应报文中必定包含HTTP首部.首部内容为客户端和服务器处理请求和响应提供了所必须的信息. 2.HTTP首部字段是由首部字段名和字段值构成,中间用冒号“:”隔开.字段 ...
- Java 中的锁机制
多个进程或线程同时(或着说在同一段时间内)访问同一资源会产生并发(线程安全)问题.解决并发问题可以用锁. java的内置锁: 每个java对象都可以用做一个实现同步的锁,这些锁称为内置锁.线程进入同步 ...
- Java面试集合(五)
1. 继承 在Java中的三大特性中存在一种为继承,继承究竟是用来解决什么问题的呢?在我们写代码的时候,我们会在一些类中使用相同的属性和方法,如两个不同的人(类),共同都有年龄,身高,体重等. 那么我 ...
- [Postman]响应(7)
Postman响应查看器有助于确保API响应的正确性.API响应由正文,标题和状态代码组成.邮递员在不同的标签中组织正文和标题.选项卡旁边会显示API调用的状态代码和完成时间. 响应还包含HTTP规范 ...
- python(leetcode)-48旋转图像
给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使用另一个矩阵来旋转图像. 示例 1: 给定 m ...
- javaScript笔记详解(1)
javaScript基础详解 版权声明 本文原创作者:雨点的名字 作者博客地址:https://home.cnblogs.com/u/qdhxhz/ 首先讲javaScript的摆放位置:<sc ...