日期:2014-05-18  浏览次数:20683 次

关于insert很疑惑!!!!
insert之前判断这条数据是否合法好?
还是insert之后返回错误方便?
各位大侠发表下各自的意见吧!!!!!!!!!!!

------解决方案--------------------
insert之前判断这条数据是否合法好 在程序里面就先判断好

------解决方案--------------------
楼主的合法是什么意思呢?
------解决方案--------------------
你是从一个表 insert到另外一个表么?
------解决方案--------------------
合法 我觉得是符合约束 的意思吧
------解决方案--------------------
在web程序中,如果数据不合法,js就直接验证了。
在cs程序中,如果数据不合法,程序中就验证了。

如果是重复不重复之类的,也可以程序直接判断。
------解决方案--------------------
首先看你的数据是怎么来的 
从另外一个表拷贝进来的话 你最好是按照当前表的要求筛选掉
插入异常的数据然后再进行插入 或者处理成能够插入正确的数据

从程序过来的数据也是一样 保证正确的 不违反当前表的约束了再进行插入
------解决方案--------------------
最好是前台先对数据有效性进行检查,数据方面主要是数据类型及约束检查,
再复杂一点可以通过插入前触发器进行检查
------解决方案--------------------
违反唯一键插入

这样子你就直接插入了,不用去判断合法,反正不合法是不会插入到表的。
------解决方案--------------------
如果是单条插入,直接在程序里做插入。

如果是批量,建议加事务,有异常可以回滚。

在程序中捕获异常,给出提示。
------解决方案--------------------
报错就是没有成功啊 
何必一定要他插入失败呢
插入失败 正确的做法也是不成功的话全部回滚 所以一定要保证插入的数据是完全没问题的。这是常识行的。还用得着解释吗、
你关联查询当前的表 使得插入的数据不违反主键约束 直接插入正确就可以了啊 
这样更加的严谨
------解决方案--------------------
回滚 就是没有插入一条信息 回滚到插入执行前的状态
insert into table_name
select ....
from ... 
你只要保证 select 出来的东西插入table_name没有错误合法就可以了 。
------解决方案--------------------
探讨
引用:
违反唯一键插入

这样子你就直接插入了,不用去判断合法,反正不合法是不会插入到表的。


就是这个意思 我就是这么认为的 既然不合法就是报错 那何必要insert之前select呢?
但领导说必须select ,又不说为什么..........
我想问的是 先select 再insert 意义何在????????????

------解决方案--------------------
选择才能插入,没有选择会有插入?会有报错?
------解决方案--------------------
主动排除掉啊 比如:
select * from source_table a
where not exists(select 1 from targer_table where ID=a.ID)
------解决方案--------------------
貌似2种情况都一样的 没区别
------解决方案--------------------
你为什么不在获取数据是判断呢?判断合法不,若不合法提示输入错误,重新输入啊 ,
------解决方案--------------------
反对先select再insert,你select时不重复就能保证insert时也不重复?反之亦然。要真正达到select的结果与insert时一致就要加入事务控制,但这会降低性能
自己通过select判断等于让数据库的约束机制形同虚设了
------解决方案--------------------
数据库返回错误那是你的数据库后台在工作,你在你的程序里面不用处理错误并返回给你的前端界面吗?
记得读大学的时候老师就教训我们注意这个问题了。
探讨
看来各位还是不怎么明白我想问什么 ...
我想问的是:
我明知道这条数据已经存在,但我还是insert了
我insert了 不就要数据库返回异常了吗? 数据库返回:违反唯一键插入
是吧?
那我现在就不明白了,既然数据库本身就会返回错误的,那我何必要在insert之前去select一下呢?
如果是几十W几百W的数据,查找起来不是更费时间吗?意义何在?

------解决方案--------------------
最好是在插入前利用where 过滤掉错误的数据
------解决方案--------------------
先弄清楚:后台数据库的错误处理和你的应用程序错误处理是分开的,两者都是需要的。
个人愚见,^_^!