php+mysql高并发读取数据如何避免重复读取
诺离 2017-11-11 06:05:58 比如我有一张卡密表
tb_code
id code use
1 aaa 0
2 bbb 0
3 ccc 0
4 ddd 0
5 eee 0
6 fff 0
$result = mysql_query("select * form tb_code where use=0 limit 0,1");
if($row = mysql_fetch_array($result))
{
echo $row['code'];
mysql_query("update tb_code set use=1 where id=".$row['id']);
}
理想的结果是,通过 use 字段来表达这个卡密有没有获取过,当用户访问的时候,就读取一条并标记use成1,这样下一个用户访问获取时就不会重复。
但悲催的是高并发下并不是很理想,比如有20个用户在毫秒级内同时访问,就会导致获取到一样的数据。
我研究过for update 但是似乎好像没法锁住,还是依然可以读取、、我使用的环境是在php+mysql 5.4完成的