更新数据时一个小隐患的小探讨

最近在做Code review的时候发现了一个问题,高手就不用往下看了,本文适合初学者。问题虽小,隐患却非常之大,其实原理很简单,但是很多人在实际的编码过程中非常容易忽视。这个属于历史遗留问题,但严格来说技术人员应当具备一定技术敏感性,所以还是把这个问题Blog下来,以儆效尤。

很多场景会有这样的业务,在更新数据之前需要检查数据是否存在,如果不存在就新增,如果数据已经存在则Update,有开发人员会依据这样的需求,原先代码顺序如下:

image

                                       图一

 

修改后更新检查流程如下图:

image

                                         图二

 

细心的人已经发现,其实本质上来说,这两种方式从某种程度上来说都是可以接受的。如果事务处理设计的较好,通过事务处理设计或者隔离级别的设置,本质上图一的处理方式也不会导致致命的问题。但问题在于,图一的处理方式忽视了开发人员。对于开发人员能够处理的异常,建议还是由开发人员自行处理。如图一在Business A最终数据Update时会引发数据库异常(记录不存在),但这个异常完全可以避免(图二的处理方式就不会引发异常)。从这个角度来看,图一的处理方式是不可取的。

以上仅仅是我个人观点,如果有异议,欢迎拍砖。

posted @ 2010-09-02 14:15  写代码的螺丝  阅读(132)  评论(0编辑  收藏  举报