zoukankan      html  css  js  c++  java
  • 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条随机生成数据

    执行后部分截图如下:

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

  • 相关阅读:
    java.lang.OutOfMemoryError: GC overhead limit exceeded
    Ural 1146 Maximum Sum(DP)
    [算法系列之四]优先级队列
    Python源代码--整数对象(PyIntObject)的内存池
    3星|何帆《猜测与偏见》:社科书评集
    4星|《认识经济》:全面系统的经济学普及读物,鸿篇巨制,价格超贵
    3星|《东方启动点》:民营企业家们的故事,故事多分析概括少
    2星|《大师的管理课》:畅销书作家们的35篇励志散文
    3.5星|《蓝海战略2》:实施蓝海战略的具体工具与方法。案例牵强且偏老旧
    2星|《读懂华为30年》:基于公开资料的整理和肤浅的发挥
  • 原文地址:https://www.cnblogs.com/phpper/p/7361841.html
Copyright © 2011-2022 走看看