我想更新一個有400多行的表。我正在嘗試更新整個表格!每一行都需要更新爲新的值。所以,我想在php中做一個循環,它會生成所需的UPDATE語句並逐個將它們發送到數據庫。這麼多更新查詢
我覺得這樣會對數據庫造成嚴重的影響,其中一些可能會丟失。我對嗎?或者可以這樣做嗎?如果不是的話,我還能以其他方式做到這一點?有沒有辦法讓一個查詢中的所有更新都可以觸發一次?
其他的想法是,創建一個包含所有UPDATE語句的大SQL語句。但MySQL是否支持在一個語句中進行乘法更新?
預先感謝您。
我想更新一個有400多行的表。我正在嘗試更新整個表格!每一行都需要更新爲新的值。所以,我想在php中做一個循環,它會生成所需的UPDATE語句並逐個將它們發送到數據庫。這麼多更新查詢
我覺得這樣會對數據庫造成嚴重的影響,其中一些可能會丟失。我對嗎?或者可以這樣做嗎?如果不是的話,我還能以其他方式做到這一點?有沒有辦法讓一個查詢中的所有更新都可以觸發一次?
其他的想法是,創建一個包含所有UPDATE語句的大SQL語句。但MySQL是否支持在一個語句中進行乘法更新?
預先感謝您。
只有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;
這就是我正在尋找的。非常感謝你^^。 –
這是不難數據庫。
如果你願意,你可以連這樣
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
這就是我的想法,但我很害怕該字符串將太長,無法處理。但爲交易ID +1,我喜歡它,謝謝^^。 –
看看這個,如果你想看看什麼樣的脂肪酶/關於查詢的最大長度的PHP/MySQL http://stackoverflow.com/questions/3026134/is-there-a-limitation-to-the-length-of-該查詢功能於MySQL的 – Archlight
有多個更新是很好的 - 對於N語句更新,確保適當使用* transaction *。如果真的存在多個更新的問題(其中可能存在不同的情況),那麼還有其他解決方案,但要保持簡單。 「 – user2864740
」有超過400行的表格。「 - 哇! –
爲什麼不在一個聲明中更新? UPDATE'tableName' SET'col' ='val'WHERE conditions; – cecilozaur