日期:2014-05-16  浏览次数:20638 次

类似新手卡发放怎么防止重复
我现在有一个需求,一个数据表中已经预先插入了许多新手卡卡密,然后需要本站每个会员自行去领取。但是问题来了,如果在一个很短的时间段有很多人都去领取这个新手卡,怎么设计,才能不重复
------解决方案--------------------
这个问题是关于并发的问题,解决办法是加锁,sql加一个行级锁就行了。以前我也做过类似的,这个必须加锁,可以在数据库里加锁,可以在代码中对那函数加锁, 你可以去查一下类似数据库加锁的资料。
------解决方案--------------------
方法很多,可以参考一下乐观锁悲观锁那些
------解决方案--------------------
我新手,刚刚自己想的,可能在逻辑上会有漏洞..你还是查他们说的名词比较靠谱~
------解决方案--------------------
用一个字段记录卡是否已被使用,然后利用mysql 的update 锁表来解决并发问题。

例如表结构为
id cardno cardpass used

$sqlstr = "update table set used=1 where used=0 and cardno=xxxx";
mysql_query($sqlstr);
$affected_rows = mysql_affected_rows();
if($affected_rows==1){ // 表示修改成功
   // 执行使用成功处理
}else{
   // 执行卡已被使用处理
}