替换MySQL表中的整个数据

时间:2012-04-04 21:41:30

标签: mysql transactions truncate

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

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

我计划通过

实现这一点
TRUNCATE TABLE scores; INSERT INTO SCORES SELECT ....

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

如果您建议进行交易,那么放置是否足以用“BEGIN TRAN ... END TRAN”包围查询,您是否建议MyISAM或InnoDB用于“得分”表?

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

1 个答案:

答案 0 :(得分:0)

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

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