相关文章推荐
要出家的煎饼果子  ·  CREATE INDEX ...·  4 天前    · 
大力的充值卡  ·  failed to load driver ...·  1 年前    · 
犯傻的上铺  ·  Oops!!! - 简书·  1 年前    · 
大鼻子的筷子  ·  Stimulsoft ...·  1 年前    · 

I want to know whether is it a good idea to catch exception based on unique index of sql in java.

i want to catch an exception like 'duplicate entry for 1-0' if so then handle exception otherwise insert properly in database table?

I say you don't do that, for two reasons:

the error messages are a bit unclear: ERROR 1062 (23000): Duplicate entry 'xxx' for key 1. Are you always 100% sure which key is 1?

it locks in you to a specific database vendor

I find it simpler to transactionally:

check for row's existence;

throw an exception if the row already exists;

insert the new row.

Performance issues:

I say measure twice, cut once. Profile the usage for your specific use case. Top of my head I would say that the performance will not be an issue except for the heavy db usage scenarios.

The reason is that once you perform a SELECT over that specific row, its data will be placed in the database caches and immediately used for insertion check done on the index for the INSERT statement. Also keeping in mind that this access is backed by an index leads to the conclusion that performance will not be an issue.

But, as always, do measure.

I want to know whether is it a good idea to catch exception based on unique index of sql in java.i want to catch an exception like 'duplicate entry for 1-0' if so then handle exception otherwise inser...
该文为《 MySQL 实战 45 讲》的学习笔记,感谢查看,如有错误,欢迎指正 一、查询和更新上的区别 这两类索引在查询能力上是没差别的,主要考虑的是对更新性能的影响。建议尽量选择普通索引。 1.1 MySQL 的查询操作 查找到第一个满足条件的记录后,继续向后遍历,直到第一个不满足条件的记录。 由于索引定义了唯一性,查找到第一个满足条件的记录后,直接停止继续检索。 普通索引会多检索一次,几乎没有影响。因为 InnoDB 的数据是按照数据页为单位进行读写的,需要读取数据时,并不...
1.采用force index 强行选择一个索引。 2.修改sql语句、引导 MySQL 使用我们期望的索引。 3.在有些场景下,我们可以新建一个更适合的索引,来提供给优化器做选择,或删除掉误用的索引。 由于索引统计信息的不准确,可以用analyze table来解决。 而对于其它优化器误判断的情况,你可以在应用端用force index 来强行指定索引,也可以通过修改语句来引导优化器,还可以通过增加或者删除索引来绕过这个问题。
迁移到达梦数据库后,发现我们的全局 异常 拦截 唯一索引 异常 无法被正常拦截,给前端直接抛出了数据库原始的错误信息,对用户极其不友好。如果不对 唯一索引 异常 拦截,则默认 与 的 异常 信息如下:在 通过 注解,实现对 异常 响应的统一封装。可参考:全栈开发之后端脚手架:SpringBoot集成MybatisPlus代码生成,分页,雪花算法,统一响应, 异常 拦截,Swagger3接口文档以下是对数据库 唯一索引 异常 的拦截,统一返回:编号不可重复。 对主流的数据库的 异常 进行了封装与翻译,对于 都可以进
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居 、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...
转自:https://blog.csdn.net/wenniuwuren/article/details/88887813 很多时候只要觉得捕获 DuplicateKeyException 就行,其实这样还不够,底层还会抛出其他 异常 类型,完整的捕获如下: import org.springframework.dao.DuplicateKeyException; public void method() { try { result = dao.inser
1.使用 MySQL 设置主键时需要注意以下问题: (1)如果主键类型是int,可以直接设置主键自增 (2)如果主键类型不是int,需要处理,否则将会报错:Duplicate entry '' for key 'PRIMARY' 2.该报错问题是插入数据表 遇到键重复,解决方案如下: (1)IGNORE 例如:INSERT IGNORE INTO Table_name(…..) VALU...
公司业务,表设置了唯一值,一般业务代码里先查一遍数据库,存在的话就直接返回货修改,不存在才插入,测试没什么问题,但是上到线上高并发下疯狂报DuplicateKeyException…查阅两个多小时才发现 MySQL 还有ON DUPLICATE KEY UPDATE这样的用法 比如,有一张表,专门记录业务里的唯一数据记录,这张表里如果存在此唯一数据的记录就更新此行数据的某个字段,如果此唯一数据不存在,那么就添加一条最新数据。 一贯操作:如果不知道 mysql 有 ON DUPLICATE KEY UPDAT
insert ignore into insert ignore into(使用 唯一索引 再次插入相同的值会忽略提示*如果insert into 数据库会报错*,相同值不会插入但id指针会向后跳一位),这样当有重复记录就会忽略,执行后返回数字0。 insert ignore i...