laravel下新增数据,偶尔会有重复数据

1.公司要实现一个业务逻辑:一天一个手机号码phone只能提交一次订单。
目前这个业务逻辑不涉及高并发等场景,大概也就是十几秒钟一次订单;

2.在编写了简单的表单验证之后,使用laravel5.4

3.在本地经过简单的表单测试后一切正常上线;

4.问题出现在数据库会在某种情况下出现数据重复录入,但前台js已经做好了重复提交等功能,而且就算是重复提交了,这时候第二次请求应该会被return;

5.经尝试不管laravel做任何去重,在同时两个页面提交的情况下,都有可能重复

解决方法:

可以从数据库的设计方面进行调整

根据业务逻辑,可以将多字段建立联合唯一 索引 ,避免重复

ALTER TABLE `yuns` ADD UNIQUE(`aid`, `code`, `phone`);

aid:活动id,code:商品编码,phone:手机号

如果添加联合唯一索引,需要将之前重复数据删除,

首先获取重复数据

SELECT *, COUNT(*) FROM yuns GROUP BY aid, phone, code HAVING COUNT(*) > 1;

获取成功后可通过laravel将重复数据删除。

之后在添加重复数据时会报错:

最好获取mysql异常,是程序正常运行

use Illuminate\Database\QueryException;
try {  
    \DB::table('yuns')->insert($yuns);
            
} catch (QueryException $e) {  
    echo "插入错误: " ;  
}