在进行insert操作的时候,如果想插入相同的数据,只要存在约束,就可能会爆出一个违反唯一约束的错误,导致插入失败,页面报错。

这个显然是我们不想看到的,所以要么捕获这个错误输出失败结果,要么就保证插入的约束性数据是唯一的。

本次记录了两种方法。

一、代码实现

(1)捕获错误

有错就要抛出,在逻辑中处理错误,不要吞错误。

如果捕获到错误,直接返回一个0,证明插入失败了,就不会显示报错了。

如果插入成功,那就直接返回插入影响的行数,逻辑判断插入成功。

(2)修改映射文件确保约束唯一

很明显不能用在分布式架构上,小应用可以这样玩。还有很多明显的劣势,建议不要轻易使用。

  1. oracle,支持sys_guid()方法生成唯一约束。
  2. mysql,支持通过UUID方法,例如REPLACE(UUID(),”-“,””)代替主键进行插入。

下面只演示oracle操作。

在所有insert操作中加入这段,用来保证每个id都是唯一的

这样就不用catch错误了。

但是这种方法也不是任何时候都适用的,因为有时候update也要遵循唯一约束条件的,那时候就不方便随机生成数据了。

个人觉得还是需要使用捕获错误的那种方法比较好些。

(3)分布式唯一ID生成方案

唯一正解。

二、总结

根据需要调整架构,根据架构调整实现方式。

发表评论

电子邮件地址不会被公开。 必填项已用*标注