html页面发送请求到php,然后php执行for循环插入多条数据,发现偶尔会有部分数据重复
场景
- 抓取网上图片保存,因此执行时间挺长,但是设置过,不至于超时
- for循环一次,下载图片,select判断是否有重复数据,没有重复,先将图片上传到ftp服务器,获取结果,然后会在三个表里面各插入一条数据(每次会停0.5秒)
问题
发现有时候,数据库中数据会出现重复(下载下来的数据没有重复,因为是通过别人的接口请求的,而且情况只是偶尔出现),而且id是相邻的(上传ftp也上传了两次,感觉不是mysql问题),想请教一下是什么原因导致的?
PS
- 希望有人能解答原因
- 希望有除了加唯一索引以外的其他方法来防止
回复内容:
html页面发送请求到php,然后php执行for循环插入多条数据,发现偶尔会有部分数据重复
场景
- 抓取网上图片保存,因此执行时间挺长,但是设置过,不至于超时
- for循环一次,下载图片,select判断是否有重复数据,没有重复,先将图片上传到ftp服务器,获取结果,然后会在三个表里面各插入一条数据(每次会停0.5秒)
问题
发现有时候,数据库中数据会出现重复(下载下来的数据没有重复,因为是通过别人的接口请求的,而且情况只是偶尔出现),而且id是相邻的(上传ftp也上传了两次,感觉不是mysql问题),想请教一下是什么原因导致的?
PS
- 希望有人能解答原因
- 希望有除了加唯一索引以外的其他方法来防止
这个原因还是真不好判断。
如何防止?批量插入之前先进行一次检查,是否有重复数据。通过检查之后再进行事物插入。
请问你是图片下载完再插入下一条数据的吗? 其实可以把图片下载的服务器放到队列里面,做个异步操作,让下载图片跟插入数据错开
如果下载数据逻辑没有问题,那肯定是html页面发送多次请求到PHP。
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn