我想将100万条记录插入到具有相同值但唯一主键的数据库中。我不想先将记录写入文件,然后将该文件导入数据库。 请提供一些我可以为此运行的有效查询。
答案 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)
两个建议:
使用 INSERT DELAYED
。来自manual:
<击>
如果使用 DELAYED
关键字,服务器会将要插入的行放入缓冲区,然后发出INSERT DELAYED
语句的客户端可以立即继续。如果表正在使用中,则服务器会保留行。
正如@Matt在评论中指出的那样,INSERT DELAYED
自MySQL 5.6.6起已被弃用。在5.7中,它被接受但被忽略,并且手册说它将在未来的MySQL版本中被删除。不要使用它。
使用交易。 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++;
}