将1百万条记录插入MySQL数据库

时间:2011-11-17 07:07:37

标签: mysql insert iterator

我想将100万条记录插入到具有相同值但唯一主键的数据库中。我不想先将记录写入文件,然后将该文件导入数据库。 请提供一些我可以为此运行的有效查询。

4 个答案:

答案 0 :(得分:3)

你可以尝试:

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
    SET @x = 0;
    REPEAT 
        INSERT INTO your_table SELECT NULL, field1, field2;
        SET @x = @x + 1; 
    UNTIL @x > p1 END REPEAT;
END

并使用p1执行此过程作为所需的记录数 需要明确的是:在SELECT NULL, field1...中,空参数用于 id字段,如果定义为AUTO_INCREMENT PRIMARY KEY,则会自动生成。

答案 1 :(得分:1)

使用行生成器:http://use-the-index-luke.com/blog/2011-07-30/mysql-row-generator#mysql_generator_code

如,

INSERT INTO table_name
       (id, c1,c2,c3,c4)
SELECT gen.n, 1,2,3,4
  FROM generator_1m;

答案 2 :(得分:0)

两个建议:

  1. 使用INSERT DELAYED。来自manual

    <击>   

    如果使用DELAYED关键字,服务器会将要插入的行放入缓冲区,然后发出INSERT DELAYED语句的客户端可以立即继续。如果表正在使用中,则服务器会保留行。

    正如@Matt在评论中指出的那样,INSERT DELAYED自MySQL 5.6.6起已被弃用。在5.7中,它被接受但被忽略,并且手册说它将在未来的MySQL版本中被删除。不要使用它。

  2. 使用交易。 MySQL将知道在您提交更改之前不需要更新索引。

答案 3 :(得分:0)

在mysql中将表主键设置为auto_increment。

我正在向你展示带有条件的php示例。按照这种简单的逻辑用任何语言来实现。

$a = 150000; // set the count you need
$i=0;
while($i < $a)
{


$name = 'sample';

$segment = "insert into table values
(null,'$name')";



$ss = mysql_query($segment);



echo mysql_error();

$i++;


}