这是一个比较现实点的问题了,就说判断一个用户是否存在的问题,一般情况下我们会用"select count(*) from t_bill tb where tb.t_bill_code = ?"这句话是说统计有多少条相同记录,而我们真正的需求是只要有一条记录就返回,所以代码应该写成成"select count(1) from dual where exists (select * from t_bill tb where tb.t_bill_code = ? )"。当然,这还是不行,因为现在我们遇到的是电信项目,就如现在的一条语句,比如客户人员比较少的河北石家庄,上千人的小手同时点击查询,当他们查询的结果肯定就是一样的(如果那个东西不存在),然后同时点插入,当然了,第一个插入的时候是没有问题的,不过之后的人插入,就会抛出唯一性异常,这是由于在查询时候没有进行相关的队列造成的,所以在查询的时候我们常常会在这种模块里面使用锁,使得可以单一的进行完成之后其他人才能继续, :oops: 这也是没有办法的办法,虽然在性能上有一定风险,但是相比并发量的数据风险,程序上的还是好解决一些
关于验证是否重复的一些建议
最新推荐文章于 2022-04-09 08:18:27 发布