php向mysql执行insert时,提示“mysql duplicate key”,如何处理?

前提:【laravel4】服务器端提供接口全部采用异步方式调用,数据表有唯一键
场景:在并发请求处理中,mysql数据库会出现“ Integrity constraint violation: 1062 Duplicate entry ”,如两个用户同时请求注册email

$ret = User::create(array(
    'email' => "nick@nick.com"
));

我想让这两个并发请求都成功返回,并返回Email,如何规避掉键值重复。
目前有以下几种:
1)插入前,使用select查询,但这个并不能解决问题。
2)使用insert ignore
3)使用insert on duplicate key
4)直接try catch
哪种处理方案会好些?

那就要看你的需求了,出现Duplicate entry这个错误是因为主键有重复,如果是以uid为主键的话,那么要考虑uid生成算法是否有问题,或者是否重复注册了

  • Illuminate中的call_user_func出错
  • pjax问题
  • php如何解决redis的存取乱码问题?
  • tp框架怎么点击A标签跳出frame框架
  • mysql-atlas的日志问题
  • php文件以及cli运行权限问题
  • 关于PHP的匿名函数和闭包
  • redis 保存数组(json_encode不成功,serialize成功)
  • sphinx的phpAPI无法查出数据,但是在命令行(cli)却可以,为何?
  • 文件上传时的一个问题
  • php 在线打开word文档?