我正在创建一个游戏,玩家可以挑战存储在数据库中的随机播放器。这就是我正在做的:(MySQL数据库)修改同一行的多个查询
当随机用户的用户搜索,如果没有用户的等待,我设置了用户的“等待”属性为1
如果有已经是等待挑战的用户('等待'已设置为1),我将它们匹配在一起并将其“等待”属性设置为0.(基本上,我查询数据库表的任何用户的“等待”属性设置为1.)
我想我的第一个问题是,这是一个好主意吗?我关心的是同步。如果两个用户同时查询等待的玩家,则等待的用户将被挑战两次。虽然选择查询和更新查询之间的时间范围非常小,但这在技术上是可行的,对吧?
有没有办法避免这种情况?或者是我不应该担心的事情?
ISAM或InnoDB? – 2011-04-19 17:12:22
我想你可以使用表锁。 – Brad 2011-04-19 17:13:24
正确的话,如果你不在应用层处理它,你应该使用表锁。试试看http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html – aweis 2011-04-19 17:17:19