关于insert很疑惑!解决思路
关于insert很疑惑!!!!insert之前判断这条数据是否合法好?还是insert之后返回错误方便?各位大侠发表下各自
关于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 过滤掉错误的数据
[解决办法] 先弄清楚:后台数据库的错误处理和你的应用程序错误处理是分开的,两者都是需要的。
个人愚见,^_^!