请教大家一个问题
是这样 游戏 发新手卡
如何防止多个人同时领取一张卡?我现在是这样做的 在新卡的表 设置一个状态字段
1为已经领取 0为未领 1个用户名字段
当用户领取的时候 update未领取的一条记录 同时将用户名update为领卡的用户这样多人同时领取的时候 会不会update同一条数据啊?有什么解决方案啊
是这样 游戏 发新手卡
如何防止多个人同时领取一张卡?我现在是这样做的 在新卡的表 设置一个状态字段
1为已经领取 0为未领 1个用户名字段
当用户领取的时候 update未领取的一条记录 同时将用户名update为领卡的用户这样多人同时领取的时候 会不会update同一条数据啊?有什么解决方案啊
这些数据多.新手卡一般也会比较多.
而且不同游戏的卡类型并不会都是新手卡,只是大部分是,还是有一部分不是.
这点要考虑到.数据表最好两张,一张存储所有未领取的卡数据.
依仗存储已领取的卡数据.
因为数据比较多,那些已领取的就没必要和未领取的放在一起了,表数据太多会影响速度.
而一般未领取的表操作的要多点.领的时候,直接随机查询出一条某游戏的某服务器的新手卡数据SELECT *
FROM `tablename` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(kid) FROM `tablename`)-(SELECT MIN(kid) FROM `tablename`))+(SELECT MIN(kid) FROM `tablename`)) AS kid) AS t2
WHERE t1.kid >= t2.kid
ORDER BY t1.kid LIMIT 1;后面直接把未领取的着条数据删除.再和对的用户ID插入到已领取的表里去
有唯一ID的话,多个用户同时更新时,你只要根据ID来更新就不会更新同一条数据了。
LOCK TABLES 新卡表 WRITE
update 新卡表 set 用户名=领卡人名
UNLOCK Tables