想要测试不同结构的sql引擎和性能之间的区别,故此需要录入大量测试数据,并且不可能手动录入。
正常在开发过程中可以借助例如JAVA语言中框架已经封装好的方法达成批量插入数据的目的,这里主要是记录直接用sql语句实现,提供一个基础思路:
1、目前有一张user表结构如下:
2、 实现批量刷入测试数据:
TRUNCATE TABLE user; #注意!!!这里会清空表数据,如果不想清空请删除
DROP PROCEDURE IF EXISTS insert_data; #如果存在此存储过程则删掉
DELIMITER $ -- 使用delimiter后,将不把分号当做语句结束,会将该段整个提交
CREATE PROCEDURE insert_data()
BEGIN
DECLARE i INT DEFAULT 1;
SET @valuesSql = " ";
WHILE i< 101 DO
SET @sqlString = CONCAT("('",i,"','",CONCAT("测试",i),"','",10,"','",0,"')");
IF(i < 100) THEN
SET @valuesSql = CONCAT(@valuesSql,@sqlString,",");
ELSE
SET @valuesSql = CONCAT(@valuesSql,@sqlString);
END IF;
SET i = i+1;
END WHILE;
SET @exesql = CONCAT("insert into test.`user` (id,userName,age,sex) VALUES ",@valuesSql);
#SELECT @exesql; 打印sql,如果太长不建议打印
PREPARE stmt FROM @exesql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
3、运行完成后调用存储过程
CALL insert_data();
4、查询结果
完成!
原理很简单:利用循环语句和concat连接字符串,最后完成sql语句组合。再使用:
PREPARE stmt FROM @exesql; //准备sql语句
EXECUTE stmt; //执行
DEALLOCATE PREPARE stmt; //释放
即可