我有一個數據庫和一個表(innoDB):表。塊併發mysql更新查詢
此表中的行是:m1和m2。
我在一個頁面上有2個提交按鈕。
提交1做到這一點:
Database::q('UPDATE table SET m1 = ?s, m2 = ?i WHERE id = ?i', $n, 0, $ID);
提交2做到這一點:
Database::q('UPDATE table SET m2 = ?s WHERE id = ?i', $n2, $ID);
的問題:如果用戶提交的DET同時兩種形式。可以說在提交1時爲100 000($ n),在提交2時爲50($ n2)。 結果將在更新之後:m1爲99 950,m2爲100 000。
我該如何預防? 我嘗試使用交易,但它仍然無法正常工作。
該語法正確嗎?我不明白什麼時候使用一個:exec,query,execute?
try {
Database::beginTransaction();
Database::q('..');
Database::commit();
} catch (Exception $e) {
Database::rollBack();
echo 'ERROR!';
}
這是databass類我使用: http://pastebin.com/PfsiYysX
什麼數據庫引擎?如果你想要符合ACID的行爲,使用InnoDB而不是MyIsam。 –
即時通訊使用InnoDB – medusa1414
我不明白你的例子,100萬爲n1 => m1 = 100000,m2 = 0; 50在n2 => m2 = 50;你怎麼能在m1上獲得99 950? – regilero