对于游戏,我正在尝试实现一个分数表。根据游戏逻辑,分数通常会在一个用户完成一轮(每隔几分钟发生一次)时发生变化;但不能保证两个用户会同时完成。
为了避免每次用户检查分数时都重新计算分数,我计划将分数数据保存在一个持久表中,该表将在每轮完成时更新。
我计划通过
TRUNCATE TABLE scores; INSERT INTO SCORES SELECT ....
但我担心的是当两个用户同时完成时会发生什么。我在一个连接中传递整个查询(来自 ASP.NET,如果这很重要),但是两个查询一起被认为是原子的吗?还是您建议我必须实现手动事务逻辑?
如果您建议交易,那么用“BEGIN TRAN...END TRAN”将查询括起来就足够了,您是否建议使用 MyISAM 或 InnoDB 作为“分数”表?
如果重要的话,我的 MySQL 版本是 5.0.92-log。