2011-10-07 49 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语句...老实说,这个概念还没有明确.. –