mysql应用存储过程批量插入数据

--批量插入数据的sql语句

delimiter $$

DROP PROCEDURE IF EXISTS `test.sp_insert_batch` $$

CREATE DEFINER =`root`@`localhost` PROCEDURE `sp_insert_atch`(IN number INT)

BEGIN

    DECLARE i INT ;

    SET i = 1;

    #such as 1-2000,2000-4000,

    WHILE i <= number DO 

        IF MOD(i,2000) = 1 THEN 

            SET @sqltext = CONCAT('(''',CONCAT('t',i),''',''',now(),''',',CEIL(10*rand()),')');

        ELSEIF MOD(i,2000) = 0 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;

            deallocate prepare stmt;

            SET @sqltext='';

        END IF; 

END$$



delimiter ;







CREATE TABLE `song`(

    `id` INT NOT NULL AUTO_INCREMENT COMMENT 'Autoincrement element',

    `name` TEXT NOT NULL ,

    `datetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    `rank` INT NOT NULL ,

    PRIMARY KEY (`id`)

) engine = MyISAM AUTO_INCREMENT = 8102001 DEFAULT CHARSET = gbk;


注:此存储过程,实际应用需要测试。

你可能感兴趣的:(mysql)