如何在MySQL中有效地插入大量行?

时间:2012-04-30 22:02:13

标签: php mysql

我有100个用户回答了一个问题。只有大约10%的用户会选择正确的答案。

我想创建一个新表格,其中90%的每个人都回答错误,他们的用户名和他们提供的错误答案。

最好的方法是什么?

我是否应该首先创建一个输入错误答案的用户名数组,然后执行foreach循环,每次迭代都使用INSERT MySQL?

还是有一种MySQL方法可以让这种方法“适用于所有没有回答权利的人”吗?

非常感谢。此致

4 个答案:

答案 0 :(得分:3)

执行大量单个插入的最快速,最简单的方法是:

INSERT DELAYED

答案 1 :(得分:2)

使用多插入SQL查询,如下所示:

INSERT INTO table1 (col1, col2) VALUES (1, 2), (6, 9), (7, 8)

这将允许您在单个查询中插入所需的行数。

答案 2 :(得分:2)

假设您有一个存储所有用户和答案的表,如下所示:

Table : all_answers

  user_id  |  answer
    joe         a
    mary        b
    john        c

正确的答案是c,您可以拥有一个名为wrong_answers的类似表(相同的架构),并按如下方式填充:

 INSERT INTO wrong_answers 
        SELECT user_id, answer FROM all_answers WHERE answer <> `c`

您还可以为您或视图创建触发器。

如果您在wrong_answers中存储了其他值(例如主键),则需要指明填充wrong_answers中的值,如下所示:

INSERT INTO wrong_answers (user,answer)
    SELECT user, answer FROM answers
    WHERE answer <> 'c';

答案 3 :(得分:0)

insert into new_table
select (username from old_table where got_it_wrong = 1 )