向MySQL数据库插入100万条记录

3

我希望向数据库插入100万条相同值但主键唯一的记录。我不想先将记录写入文件,然后再将该文件导入到数据库中。请提供一些高效的查询语句,以便我可以运行它们。


你正在使用任何编程语言吗? - Naveed
基于命令行的批处理作业可以提供帮助。您可以使用PHP CLI、C#等编写此类批处理作业。 - Raptor
4个回答

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...中的NULL参数是为了id字段,如果将其定义为AUTO_INCREMENT PRIMARY KEY,则将自动生成。


2

一行生成器很棒,但我认为有点高级了。 - Gustav Bertram
@Gustav Bertram 好的,只需要复制和粘贴。我已经更改了链接,所以它指向文章末尾的可用代码。 - Markus Winand

1

两个建议:

  1. 使用 INSERT DELAYED。来自 手册

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

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

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


1
自MySQL 5.6版本起,INSERT DELAYED已被弃用。 - Matt

0

在MySQL中将表的主键设置为自动增量。

我将向您展示带有while条件的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++;


}

原帖作者明确要求MySQL查询。 - Gustav Bertram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接