2012-04-04 72 views
1

对于一个游戏,我试图实现一个分数表。根据游戏逻辑,当一个用户每隔几分钟完成一轮时,分数通常会改变;但不保证两个用户将同时完成。在MySQL表中替换整个数据

为了不重新计算每次用户检查分数时的分数,我打算将分数数据保存在永久性表中,每次完成一轮后都会更新。

我打算

TRUNCATE TABLE scores; INSERT INTO SCORES SELECT .... 

来实现这一点,但我关心的是,当两个用户完成在同一时间发生的事情。我在一个连接中传递整个查询(如果这很重要,则从ASP.NET中),但是两个查询一起被视为原子?或者您是否建议我必须实施手动交易逻辑?

如果您建议使用事务处理,那么将查询与“BEGIN TRAN ... END TRAN”放在一起就足够了,您是否建议使用MyISAM或InnoDB作为“分数”表?

如果有问题,我的MySQL版本是5.0.92-log。

+0

为什么每次计算分数时都要截断表格? – Jordan 2012-04-04 21:51:45

回答

0

两个查询只有在事务内部执行时才是原子的。即使这样,他们也只会对世界其他地方产生影响。在交易内部,它仍然是两个完全独立的操作。

事务不会保护您免受对数据集进行操作的两位以上的用户。您仍然必须在相关表上建立锁定以防止并发访问。