mysql 字段 唯一 重复数据_MySQL数据库字段如果设置唯一约束 数据重复时怎样获取相应的报错信息...

1,可以使用laravel自带的验证器来进行数据库某一字段唯一性的验证(这个时候实际上是去数据库查,查到了就代表有,查不到就无)

2,一般情况下,如果这个业务是比较关键的业务,并且有可能面对高并发的情况,那么 在数据库 级别还要对这个字段设置唯一索引

那么我们就有了双重保证,当两个请求来了要把两条数据的这个字段设置成同一个值的时候,如果不是并发的话,laravel的 验证器就给我们拦下来了,并提示用户我们在验证器中设置好的错误信息。

但是如果是并发的话,这个两个请求有可能通过了laravel验证器的验证, 但是 最终会在 数据库这一层面被拦下来。最终保证了数据的一致性。

这种情况下,我们只能在业务代码中try catch 捕捉到这个 数据库异常,但是实际上 laravel 并没有提供 在php层面上这个异常的 具体的结构化的信息(例如是什么异常、是哪个字段导致的等等)。只是提供数据库返回的错误信息(字符串形式),当然在这个错误信息中我们能 知道是 什么错误(通过错误码),也能知道具体字段(从错误信息中解析出来)

当然我们 能 自己做相关的工作,使得这个错误信息更加结构化(做从sql报错中解析错误的工作)。这样 可以 不用在laravel 的验证器 级别做数据库相关的验证了(这个验证应该是没有相关锁的操作,有可能在高并发的情况下出现数据不一直的情况)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值