2010-05-12 66 views

回答

3

您可以使用一個SQL語句,像這樣插入多行:

INSERT INTO myTable (col1, col2, col3) VALUES ('myval1', 'myval2', 'myval3'), ('myotherval1', 'myotherval2', 'myotherval3'), ('anotherval1', 'anotherval2', 'anotherval3'); 

更新:

MarkR是正確的,他的評論 - 如果你收集用戶數據,或者你正在編譯的信息,你可以像動態構建查詢:

StringBuilder stringBuilder = new StringBuilder(); 
stringBuilder.Append("INSERT INTO myTable (col1, col2, col3) VALUES "); 
for(int i=0;i<myDataCollection.Count;i++) { 
    stringBuilder.Append("(" + myDataCollection[i].Col1 + ", " + myDataCollection[i].Col2 + ", " + myDataCollection[i].Col3 + ")"); 
    if (i<myDataCollection.Count-1) { 
    stringBuilder.Append(", "); 
    } else { 
    stringBuilder.Append(";"); 
    } 
} 

string insertStatement = stringBuilder.ToString(); 

兩個要點需要注意:

  1. 如果你接受來自用戶的輸入,這是非常重要消毒所有的用戶輸入,否則,惡意用戶可能會修改/刪除/降你的整個數據庫。有關更多信息,請參閱Google「SQL注入」。
  2. 我正在使用StringBuilder類,而不是使用字符串原語並簡單地追加(即string s =「Insert ...」; s + =「blah blah blah」),因爲它的StringBuilder在追加時更快,因爲它不被視爲數組,因此不需要在追加到它時調整自己的大小。
+0

多數民衆贊成好...我從我的aspx頁面傳遞價值..我沒有直接給出值... – TinTin 2010-05-12 19:20:59

+0

您可以建立查詢編程最大數據包大小(在服務器上配置) – MarkR 2010-05-12 19:29:40

+0

MarkR是正確的 - 請參閱我的更新瞭解更多信息... – AlishahNovin 2010-05-12 20:39:52

1

可以使用LOAD DATA INFILE(或LOAD DATA LOCAL INFILE)將行從現有文件批量加載到表中。

對於LOAD DATA LOCAL,文件從客戶端傳輸到服務器並作爲大批量插入。這不受最大數據包大小(如INSERT)的限制,但它仍然受限於可以在innodb中回滾的最大事務 - 它全部在一個事務中執行,所以如果它太大,它將超出回滾空間,並且無論如何,如果回滾一個非常大的事務,則需要很長時間並影響服務器。

正常情況下,作爲單個插入或加載數據加載超過幾個(可能爲數十個,可能數百個)兆字節的數據是不可取的。如果你有更多,你可以分解它。

相關問題