插入前判断是否存在!
|
|
10分 |
从技术上讲两种方法是都可以达到目的(抛出违反唯一性约束所以知道已经有了),但是从编程优化角度讲一定是先判断是不是存在然后再插入!
|
会不会影响效率,比如数据库或execl中已经有10万条数据。每一条遍历,这性能。。。。 |
|
我也觉得先查询判断后插入如果数据太多的话肯定影响效率,但异常处理的话,我感觉不太合理,更何况违反唯一约束的异常如何捕获?
|
|
select count(id) from student where id=?1;
此结果作为判断条件,这样查询应该也可以优化下。 |
|
直接插入 异常也continue 最后commit
|
|
很好的回答了 把id加索引 |
|
10分 |
具体采用哪种方案,首先要估计一下你的数据中出现主键重复的可能性有多大。
如果主键重复的可能性很小,那么就采用直接插入,捕获异常的做法。 如果主键重复的可能性很大,那么就先检查主键是否存在,然后再插入的做法。 |
先查 在插入吧 数据多影响性能,这是常情啊
|
|
同意 |
|
用异常捕获! 是抛出什么异常?
|
|
大家好 我想问下 select count(id) from student where id=?1 where id = ?1 是什么意思 ? |
|
在sql里面 比在代码里面判断 方便 快速。。执行一次sql就好了。比如:
IF not EXISTS (select * from a where item_id=@itemId and person_id=@personId) insert into a values(@itemId, @personId, getDate()) |
|
20分 |
出现异常调用的资源更加多,当然如果异常出现少的话,相比每一个插入都要查询一下来说资源就少了。不过一般都不用唯一性约束异常来做吧,异常多了数据库错误的几率会更加大吧。如果能够保证新插入的数据,不管重复或不重复都是正确的数据,直接先delete然后insert。
|
20分 |
看需求,你只是为了返回给客户端提示导入失败,所以考虑使用异常捕获就可以了,而且简单、靠谱,并发都不用考虑。还有根本不需要区分具体是抛得什么异常,只要是exception就说明程序报错了,那肯定是失败了
|