1

对于游戏,我正在尝试实现一个分数表。根据游戏逻辑,分数通常会在一个用户完成一轮(每隔几分钟发生一次)时发生变化;但不能保证两个用户会同时完成。

为了避免每次用户检查分数时都重新计算分数,我计划将分数数据保存在一个持久表中,该表将在每轮完成时更新。

我计划通过

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

但我担心的是当两个用户同时完成时会发生什么。我在一个连接中传递整个查询(来自 ASP.NET,如果这很重要),但是两个查询一起被认为是原子的吗?还是您建议我必须实现手动事务逻辑?

如果您建议交易,那么用“BEGIN TRAN...END TRAN”将查询括起来就足够了,您是否建议使用 MyISAM 或 InnoDB 作为“分数”表?

如果重要的话,我的 MySQL 版本是 5.0.92-log。

4

1 回答 1

0

两个查询只有在事务中执行时才是原子的。即便如此,它们对于世界其他地方也只会是原子的。在事务内部,它仍然是两个完全独立的操作。

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

于 2012-04-04T21:46:36.533 回答