用10 000个值填充MySQL数据库

时间:2012-09-27 11:04:37

标签: mysql sql batch-file

我想创建一个简单的程序,用一些随机值填充MySQL数据库表10 000次。我想用两个引擎InnoDB(它是标准的面向行的引擎)和InfiniDB(指定的面向列的引擎)来测试插入和读取表的速度。知道怎么做吗? 这是我数据库中其中一个表的示例:

CREATE  TABLE IF NOT EXISTS `mydb`.`tblVariable` (
  `idtblVariable` INT NOT NULL ,
   `name` VARCHAR(20) NULL ,
   `station_id` INT NULL ,  
   `description` VARCHAR(100) NULL ,
   `id_history` INT NOT NULL DEFAULT 0 ,
   `type` ENUM('Analog','Digital') NOT NULL
)

所以要解释..对于idtblVariable,这个数字将从1到10 000随机 名称可以是:PT1,...,PT10000 例如,描述将只是:a,a,a,a,10000次 等等 客户端是程序,插入和读取在C#中有表格,经典应用。这可以在批处理程序中完成吗?

2 个答案:

答案 0 :(得分:3)

这是一个将数字从1填充到10000的其他技巧。如果你创建一个临时表或一个表变量,并用0到9之间的数字填充它,如下所示:

CREATE TABLE TEMP 
(Digit int);
INSERT INTO Temp VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

然后您可以生成1到10000之间的数字,如下所示:

INSERT INTO tblVariable (idtblVariable) 
SELECT id
FROM
(
SELECT t4.digit * 1000 + t3.digit * 100 + t2.digit * 10 + t1.digit + 1 AS id
FROM         TEMP AS t1
  CROSS JOIN TEMP AS t2
  CROSS JOIN TEMP AS t3
  CROSS JOIN TEMP AS t4
) t

SQL Fiddle demo

答案 1 :(得分:1)

这可以通过存储过程完成,例如:

CREATE DEFINER = `root`@`localhost` PROCEDURE `NewProc`()
BEGIN
 #Routine body goes here...
DECLARE counter INT;
DECLARE i INT;

SET i = 0;
SET counter = 10000;

WHILE i < counter DO
    INSERT INTO tblVariable (idtblVariable, name, /*Other fields*/) 
    VALUES (i, CONCAT('PT',i), /*Other values*/);
    SET i = i + 1;
END WHILE;

END;

如果您遇到MySQL权限问题,可以删除/更新部分DEFINER = root @ localhost。 UPDATE :然后,在创建存储过程之后,您可以调用以下过程:

CALL NewProc;