在程序中对一个数据的保存使用先select语句查数据是否存在,然后根据返回结果判定是执行insert还是update操作。
if(select){update}else{insert}
如果使用直接执行update语句,而后根据update语句返回的受影响还行,如果没有受影响行说明数据库中没有数据这次应该是插入操作执行insert语句。
if(update=0){insert}
这两种写大家觉得那种效率更好。因本对sql分析不了解希望大家一起讨论一下。
先使用ctrl+L 查看执行计划
然后 在 IO !!
有一个专门函数是干这个的 存在修改不存在插入 merge
http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html
最好是程序端判断是新建还是修改
当然如果用户需求很bt,可以先select,再根据结果insert还是update
最好是程序端判断是新建还是修改 是什么意思
跟先select,再根据结果insert还是update有区别吗
@Airow: 就是在前台那里定好了,用户在新建页面的操作只是insert,如果有重复数据,直接报错,而不是update原有数据.
建议根据第一中方式实现,首先就处理逻辑上更清晰,同时一旦出现问题,在调试程序时更容易定位问题所在。
不知道你这个IF判断是程序里还是数据库的,从你的需求来看,可以放到数据库里一个SQL语句可以搞定,所以是先判断或先写入,性能应该不会影响太大。
逻辑清晰的话肯定是先判断在决定是insert还是update老~性能的话打开执行计划看下不就知道了吗..或者用Stopwatch监视下感觉不会差别太大~
1楼说的MERGE是sql server2008新引用的,不知道楼主使用的什么数据库。
sqlserver的话可以直接写到一条sql语句里:
如果木有更新成功就插入
update table1 set ....where .... IF @@ROWCOUNT=0 insert into table1(...) values(...)
我的项目是这么用的,我们数据量不是特别大,使用起来觉得性能ok
第二种省去了查询效率高些
建议第一种,第二种方法每次会执行Update操作,会导致锁表,在数据量大的时候严重影响效率。