-2

向 MySQL 数据库写入 3000 行。

INSERT INTO test (id, test) VALUES ("1", "test");
INSERT INTO test (id, test) VALUES ("2", "test");
INSERT INTO test (id, test) VALUES ("3", "test");

...

INSERT INTO test (id, test) VALUES ("3000", "test");

如何共享对数据库未挂起的部分的请求?

4

3 回答 3

2

您可以将多个INSERT语句组合成一个语句,如下所示。

INSERT INTO test (id, test) VALUES ("1", "test"), ("2", "test"), ("3", "test");

这应该会减少发送到服务器的查询数量。

此外,如果它挂起您的数据库,您可以使用关键字DELAYED( MySQL docu )。这会缓存插入,直到数据库有能力插入它们。更直接的查询可以先于您的插入,从而延迟它们。这里需要注意的重要一点是,您最终只会将数据保存在表中,而不是立即保存。

INSERT DELAYED INTO test (id, test) VALUES ("1", "test"), ("2", "test"), ("3", "test");
于 2012-05-07T08:58:13.193 回答
1

我不确定这是否是您所要求的,但是要将多个插入组合到一个查询中,您可以执行以下操作:

INSERT INTO test (id, test) VALUES
  ("1", "test"),
  ("2", "test"),
  ("3", "test");

这应该会大大加快您的脚本速度。

于 2012-05-07T08:54:23.517 回答
1

是不是您有 3000 行要插入但又不想全部写出来?如果是这样,请使用:

$insert = '';
$count = 1;
while ($count <= 3000) {
  $insert .= "('$count', 'test'), ";
  $count++;
}

$insert = substr($insert, 0, -2);

INSERT INTO test (`id`, `test`) VALUES $insert;
于 2012-05-07T09:00:05.073 回答