繁体   English   中英

mysql唯一索引用作java中的异常处理方法

[英]mysql unique index used as exception handling method in java

我想知道基于java中sql的唯一索引捕获异常是否是一个好主意。

我想捕获一个异常,例如“ 1-0重复项”,然后处理异常,否则在数据库表中正确插入?

我说你不这样做,有两个原因:

  • 错误消息有点不清楚: 错误1062(23000):密钥1的条目“ xxx”重复 您是否总是100%确定哪个键是1?
  • 它将您锁定到特定的数据库供应商

我发现交易更简单:

  • 检查行的存在;
  • 如果该行已经存在,则引发异常;
  • 插入新行。

性能问题

我说测量两次,切一次 剖析您特定用例的用法。 我要说的是,除了大量的数据库使用情况之外,性能将不是问题。

原因是,一旦您在该特定行上执行了SELECT ,它的数据将被放置在数据库缓存中,并立即用于对INSERT语句的索引进行插入检查。 同样要记住,此访问由索引支持,因此得出结论,性能将不是问题。

但是,像往常一样,要进行测量。

我不明白为什么不这样。 它可能比在插入之前运行查询更有效。 但是,捕获异常的错误代码可能比识别错误消息要好。

您可以使用REPLACE命令。 它根据记录的存在来插入/更新。 而且它也是原子的,而查询然后不是插入/更新。 如果检测到密钥冲突,这取决于您要做什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM