insert之前判断这条数据是否合法好?
还是insert之后返回错误方便?
各位大侠发表下各自的意见吧!!!!!!!!!!!
------解决方案--------------------
insert之前判断这条数据是否合法好 在程序里面就先判断好
------解决方案--------------------
楼主的合法是什么意思呢?
------解决方案--------------------
你是从一个表 insert到另外一个表么?
------解决方案--------------------
合法 我觉得是符合约束 的意思吧
------解决方案--------------------
在web程序中,如果数据不合法,js就直接验证了。
在cs程序中,如果数据不合法,程序中就验证了。
如果是重复不重复之类的,也可以程序直接判断。
------解决方案--------------------
首先看你的数据是怎么来的
从另外一个表拷贝进来的话 你最好是按照当前表的要求筛选掉
插入异常的数据然后再进行插入 或者处理成能够插入正确的数据
从程序过来的数据也是一样 保证正确的 不违反当前表的约束了再进行插入
------解决方案--------------------
最好是前台先对数据有效性进行检查,数据方面主要是数据类型及约束检查,
再复杂一点可以通过插入前触发器进行检查
------解决方案--------------------
违反唯一键插入
这样子你就直接插入了,不用去判断合法,反正不合法是不会插入到表的。
------解决方案--------------------
如果是单条插入,直接在程序里做插入。
如果是批量,建议加事务,有异常可以回滚。
在程序中捕获异常,给出提示。
------解决方案--------------------
报错就是没有成功啊
何必一定要他插入失败呢
插入失败 正确的做法也是不成功的话全部回滚 所以一定要保证插入的数据是完全没问题的。这是常识行的。还用得着解释吗、
你关联查询当前的表 使得插入的数据不违反主键约束 直接插入正确就可以了啊
这样更加的严谨
------解决方案--------------------
回滚 就是没有插入一条信息 回滚到插入执行前的状态
insert into table_name
select ....
from ...
你只要保证 select 出来的东西插入table_name没有错误合法就可以了 。
------解决方案--------------------
------解决方案--------------------
选择才能插入,没有选择会有插入?会有报错?
------解决方案--------------------
主动排除掉啊 比如:
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判断等于让数据库的约束机制形同虚设了
------解决方案--------------------
数据库返回错误那是你的数据库后台在工作,你在你的程序里面不用处理错误并返回给你的前端界面吗?
记得读大学的时候老师就教训我们注意这个问题了。
------解决方案--------------------
最好是在插入前利用where 过滤掉错误的数据
------解决方案--------------------
先弄清楚:后台数据库的错误处理和你的应用程序错误处理是分开的,两者都是需要的。
个人愚见,^_^!