2011-10-07 45 views
0

我知道比賽的條件是什麼,但我仍然沒有充分認識到:觀賽條件

首先,我知道的MyISAM不支持事務和InnoDB的一樣。

我正在構建一個社交網站,心中有很多用戶,我不知道是否需要考慮競爭條件,因爲用戶將更新他們的配置文件ON DUPLICATE KEY UPDATE,但我不知道是否會出現競爭條件以及如何編寫代碼以防止此問題?

有人可以在有多個用戶的網站上解釋比賽條件的概念嗎?使用COMMIT,ROLLBACK等。

我在哪裏使用這些東西?

+0

你認爲競賽條件是什麼?看來你在濫用這個詞。此外,在MyISAM ..上構建一個社交網站,一旦數據變得稍微大一些,它的規模就會比InnoDB更差 - 是最好的主意嗎? –

+0

想這樣http://en.wikipedia.org/wiki/Race_condition,但將其應用於代碼而不是電子 – ford

回答

0

首先,我知道myisam不支持交易和innodb。

這是一個好的開始。我建議使用InnoDB。事務是對數據庫atomic進行修改並保持一致的原因。事務還確保隔離,以便數據庫的任何用戶都不會干擾其他用戶的修改。

Race conditions有多線程時可能發生。是的,數據庫使用多個線程,但事務可以確保在另一個用戶的數據庫更改之前進行一個用戶的數據庫更改。 (是的,這是一個簡化的邏輯解釋。)

編輯添加:您可以詢問您可能在其他堆棧溢出問題中遇到的特定SQL問題,但一般而言,您希望在INSERT,UPDATE後儘快執行COMMIT或DELETE SQL語句。

+0

所以會承諾這一點: $ query = mysql_query(「SELECT $ fields FROM'users' where'user_id '=」 $ _ SESSION [ 'USER_ID'])。 COMMIT; $ query_result = mysql_fetch_assoc($ query); foreach($ args as $ field){ \t $ args [$ field] = $ query_result [$ field]; –

+0

@Emmanuel Izu Onuoha:選擇後,您不必完全提交。您在完成交易後執行COMMIT,無論需要多少INSERTS,UPDATES和/或DELETES來完成交易。 –

+0

對不起,要問愚蠢的問題..但如果你這樣說,那麼什麼是交易...因爲當用戶登錄或註冊或編輯他們的個人資料是不是交易...我建立一個網站,用戶有配置文件和寫評論...所以我怎麼做這個..我有4個不同的文件與登錄,註冊,編輯配置文件和添加評論... SQL語句...老實說,這個概念還沒有明確.. –