CREATE TABLE USER (
id INT ( 20 ) NOT NULL auto_increment,
NAME VARCHAR ( 20 ) NOT NULL,
address VARCHAR ( 20 ) NOT NULL,
PRIMARY KEY ( id )
) ENGINE = MyISAM;
バッチ挿入プロシージャの作成
delimiter //
# テーブルのデータを削除する
TRUNCATE TABLE t;
# すでにsp_test_batchプロシージャを閉じ、削除し、後で再作成する
DROP PROCEDURE IF EXISTS sp_test_batch;
# numとbatchの入力を持つストアドプロシージャを作成する。numは挿入される行の総数を表し、batchは一度に挿入される行の数を表す。
CREATE PROCEDURE sp_test_batch(IN num INT,IN batch INT)
BEGIN
SET @insert_value = '';
# 挿入された行の総数
SET @count = 0;
#
SET @batch_count = 0;
WHILE @count < num DO
# スプライシングのための内部whileループ INSERT INTO t VALUES (),(),(),...VALUESの後の部分
WHILE (@batch_count < batch AND @count < num) DO
IF @batch_count>0
THEN
SET @insert_value = concat(@insert_value,',');
END IF;
SET @insert_value = concat(@insert_value,"('name", @count, "','address", @count, "')");
SET @batch_count = @batch_count+1;
END WHILE;
SET @count = @count + @batch_count;
# SQL文を分割して実行する
SET @exesql = concat("insert into user(name,address) values ", @insert_value);
PREPARE stmt FROM @exesql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
# 変数の値をリセットする
SET @insert_value = '';
SET @batch_count=0;
END WHILE;
# データ挿入が完了したら、テーブルのレコード総数を表示する。
SELECT COUNT(id) FROM user;
END