我希望向数据库插入100万条相同值但主键唯一的记录。我不想先将记录写入文件,然后再将该文件导入到数据库中。请提供一些高效的查询语句,以便我可以运行它们。
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
,则将自动生成。
INSERT INTO table_name
(id, c1,c2,c3,c4)
SELECT gen.n, 1,2,3,4
FROM generator_1m;
两个建议:
使用 INSERT DELAYED
。来自 手册:
如果您使用了
DELAYED
关键字,则服务器将把要插入的行放入缓冲区,发出INSERT DELAYED
语句的客户端可以立即继续执行。如果表正在使用中,则服务器会保留这些行。
正如 @Matt 在评论中指出的那样,自 MySQL 5.6.6 起,INSERT DELAYED
已被弃用。在 5.7 版本中,它被接受但被忽略,并且手册中指出它将在未来的 MySQL 版本中被移除。请不要使用它。
使用事务。MySQL 将知道在提交更改之前不需要更新索引。
在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++;
}