html-PHP+Mysql 请求数据重复的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了html-PHP+Mysql 请求数据重复的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1473字,纯文字阅读大概需要3分钟。
内容图文
![html-PHP+Mysql 请求数据重复的问题](/upload/InfoBanner/zyjiaocheng/244/7ffe91c69c9d44ceb33de3e815a89af1.jpg)
status = 0
的一个数据,代码大概这样写的:
'select * from dir where status = 0 limit 1'
请求成功之后,将其status
设置为-1, 但是在用户同时发起请求的时候, 经常出现请求同一个数据的情况, 这种情况怎么可以比较快的解决呀?数据库加锁? 比较急--刚刚接触web的新人--
回复内容:
使用PHP+MYSQL做了一个内部使用的小工具, 就是用户有用户名,登录成功之后, 去服务器请求数据, 请求数据的特征是,数据库某个表的status = 0
的一个数据,代码大概这样写的:
'select * from dir where status = 0 limit 1'
请求成功之后,将其status
设置为-1, 但是在用户同时发起请求的时候, 经常出现请求同一个数据的情况, 这种情况怎么可以比较快的解决呀?数据库加锁? 比较急--刚刚接触web的新人--
事务
select 时加上悲观锁 for update
show code
begin
$id = select id from table where status=0 for update;
xxxxxxTODO SOMETHINGxxxxx
update table set status=1 where id=$id;
commit
楼上“大爷”说了支持事务类引擎(比如InnoDB)的解决办法,对于MyISAM则无解。
既然只是内部使用的小工具,我来个简单的思路:
如果只是单条数据,先更新再处理,处理失败则回滚。譬如
UPDATE `dir` SET `status`=-1 WHERE `status`=0
# 这样条件合理的话只有一个请求会更新成功,返回1,其余请求返回0更新失败。
# 继续原来的逻辑,如果原来的逻辑处理不通过则将status更新回0,这样有点类似于一个锁
如果是大量数据,第一个请求到达后先加文件锁(例如写个xxx.lock的空文件)再查数据库,每次请求前检查文件锁是否存在,如果已经存在则取消本次请求。
内容总结
以上是互联网集市为您收集整理的html-PHP+Mysql 请求数据重复的问题全部内容,希望文章能够帮你解决html-PHP+Mysql 请求数据重复的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。