需求.png
拿到需求文档的那一刻我脑海里马上冒出了上家公司拖拽排序**规则的样式,心里也大概有谱了,其实很简单,不管你怎么拖拽,我只管拿到全部的guid/id的List(按顺序排好的)然后全量去修改排序的这个字段就好了 ,但也带来了几个问题:第一:无法避免的高并发情况下出现的排序混乱风险,当然幸好一般这种需求都不会涉及到高并发场景,更何况我现在只想着这么实现这个功能先,不过在同事的指导下,有了使用SQL完成该功能的方法,这个后面再讲;第二:全量更新带来的性能问题,相信很多人知道怎么批量插入,但不知道批量修改吧,像我上家公司就很蠢的用for循环一遍一遍用id对应去更新,真的很蠢,就像我在《做程序员到现在踩过的坑》中讲到的:别在for循环里一遍一遍查数据库...原因当然很简单,数据量一旦很多,数据库连接就会爆掉的,想象一下,你有几百万数据需要更新就去执行几百万条SQL,建立几百万条数据库连接,那场景太美我不敢想,所以能用一条SQL解决的就用一条SQL解决,能只建立一次数据库连接,就不要重复建立无关紧要的数据库连接,当然慢SQL不在此列。
这里贴一下批量插入和批量更新的SQL,希望有借鉴意义: