ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 批量插入数据的存储过程

批量插入数据的存储过程

原创 Linux操作系统 作者:markzy5201190 时间:2012-06-18 14:40:35 0 删除 编辑
DELIMITER $$

DROP PROCEDURE IF EXISTS `test`.`sp_insert_batch`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_insert_batch`(IN number int(11))
BEGIN
  declare i int(11);
  set i = 1;
  -- such as 1-2000,2000-4000,....
  WHILE i <= number DO
    if mod(i,2000)=then
       set @sqltext =concat('(''',concat('t',i),''',''',now(),''',',ceil(10*rand()),')');
    elseif mod(i,2000)=then
       set @sqltext=concat(@sqltext,',(''',concat('t',i),''',''',now(),''',',ceil(10*rand()),')');
       set @sqltext=concat('insert into song (name,datetime,rank) values',@sqltext);
       prepare stmt from @sqltext;
       execute stmt;
       DEALLOCATE PREPARE stmt;
       set @sqltext='';
    else 
       set @sqltext=concat(@sqltext,',(''',concat('t',i),''',''',now(),''',',ceil(10*rand()),')');
    end if;
    set i = i + 1;
  END WHILE;
  -- process when number is not be moded by 2000
  -- such as 2001,4002,15200,...
  if @sqltext<>'' then
     set @sqltext=concat('insert into song (name,datetime,rank) values',@sqltext);
     prepare stmt from @sqltext;
     execute stmt;
     DEALLOCATE PREPARE stmt;
     set @sqltext='';
  end if;
END$$

DELIMITER ;

附表结构。
/*DDL Information For - test.song*/
-----------------------------------

Table Create Table 
------ ----------------------------------------------------------------------------------------
song CREATE TABLE `song` ( 
          `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Autoincreament element', 
          `name` text NOT NULL, 
          `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
          `rank` int(11) NOT NULL, 
          PRIMARY KEY (`id`) 
        ) ENGINE=MyISAM AUTO_INCREMENT=8102001 DEFAULT CHARSET=gbk

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26855487/viewspace-733158/,如需转载,请注明出处,否则将追究法律责任。

上一篇: shell检测ip冲突
下一篇: myisampack 用法
请登录后发表评论 登录
全部评论

注册时间:2012-04-05

  • 博文量
    82
  • 访问量
    454407