仅使用一个insert命令在一个表中插入多行

时间:2012-07-03 18:18:19

标签: sql

有点难以用SQL术语来解释,因为我使用的是内部技术,但是假设我有一个结构数组(类似于我们在C#,C ++等中使用的结构),我想插入它的值在一张桌子里。 所以一种方法是迭代数组的psedu代码,读取结构的字段并将它们插入表中,如下所示:

for int i =1 to array.Lenght
{
    insert into MyTable values
    {
       MyTable.Field1 = array[i].Field1;
       //etc ...
    }
}

但这很糟糕,因为表现很好。如果数组有十个元素,我们调用insert方法十次。 应该有一个brillinat方式这样做只有一个插入,以某种方式使用表上的JOINS并只调用插入一次,但我无法想象如何做到这一点......

对此有任何想法都是受欢迎的。

感谢。

2 个答案:

答案 0 :(得分:5)

使用单个查询将多个记录插入MySQL:

INSERT INTO example
  (example_id, name, value, other_value)
VALUES
  (100, 'Name 1', 'Value 1', 'Other 1'),
  (101, 'Name 2', 'Value 2', 'Other 2'),
  (102, 'Name 3', 'Value 3', 'Other 3'),
  (103, 'Name 4', 'Value 4', 'Other 4');

http://www.electrictoolbox.com/mysql-insert-multiple-records/

答案 1 :(得分:1)

这可确保查询执行一次。这只是一个想法,避免多次调用插入

@sql = 'insert into mytable(col_1) values'
for int i =1 to array.Lenght
{
   if(i > 1)
    @sql = ',('+@sql + array[i].Field1+')'
   else
    @sql = '('+@sql + array[i].Field1+')'
}
@sql = @sql + ';'
exec @sql

脚本看起来像

 insert into mytable(col_1) values
 (1),(2),(3);