2014-01-22 72 views
0

我想更新一個有400多行的表。我正在嘗試更新整個表格!每一行都需要更新爲新的值。所以,我想在php中做一個循環,它會生成所需的UPDATE語句並逐個將它們發送到數據庫。這麼多更新查詢

我覺得這樣會對數據庫造成嚴重的影響,其中一些可能會丟失。我對嗎?或者可以這樣做嗎?如果不是的話,我還能以其他方式做到這一點?有沒有辦法讓一個查詢中的所有更新都可以觸發一次?

其他的想法是,創建一個包含所有UPDATE語句的大SQL語句。但MySQL是否支持在一個語句中進行乘法更新?

預先感謝您。

+0

有多個更新是很好的 - 對於N語句更新,確保適當使用* transaction *。如果真的存在多個更新的問題(其中可能存在不同的情況),那麼還有其他解決方案,但要保持簡單。 「 – user2864740

+3

」有超過400行的表格。「 - 哇! –

+0

爲什麼不在一個聲明中更新? UPDATE'tableName' SET'col' ='val'WHERE conditions; – cecilozaur

回答

3

只有400行的表格可以被認爲很小。至於性能:最好只發送一個更新語句而不是400.而且這不是一個會稱爲多重更新的因爲它隻影響一個表。所以沒問題。但是,根據你想要做什麼,你的陳述可能會變得相當大。

例1:更新所有記錄,從而使COL1是從什麼是雙前:

update mytable 
set col1 = col1 * 2; 

例2:更新所有的記錄有着不同的價值觀:

update mytable 
set col1 = 
    case 
    when id = 1 then col1 * 2 
    when id = 2 then col1 * 3 
    when id = 3 then col1 + 18 
    when id = 4 then 100 
    else null 
    end; 
+0

這就是我正在尋找的。非常感謝你^^。 –

1

這是不難數據庫。

如果你願意,你可以連這樣

mysql_query("update myTable set col1 = 'Row1Val1', col2 = 'Row1Val2' where id = Row1Id; 
      update myTable set col1 = 'Row2Val1', col2 = 'Row2Val2' where id = Row2Id;"); 

您的更新語句,但你應該總是包裝在一個事務

try { 
    $conn->autocommit(FALSE);//starts a transaction 
    //this is where you would have a loop or all the queries as one string 
    $conn->query($query); 
    $conn->commit(); 
    $conn->autocommit(TRUE); 
} 
catch (Exception $e) { 
    $conn->rollback(); 
    $conn->autocommit(TRUE); //end transaction 
}  

欲瞭解更多信息看這個問題PHP + MySQL transactions examples

+0

這就是我的想法,但我很害怕該字符串將太長,無法處理。但爲交易ID +1,我喜歡它,謝謝^^。 –

+0

看看這個,如果你想看看什麼樣的脂肪酶/關於查詢的最大長度的PHP/MySQL http://stackoverflow.com/questions/3026134/is-there-a-limitation-to-the-length-of-該查詢功能於MySQL的 – Archlight