不好取,建议使用row_number对表重新排序,加上自增的连续的ID,这样当我获取当前表最大的那个ID以后,对值进行+1就是下一个ID了;
还有一种做法就是,删除的时候做逻辑删除,这样ID永远是连续的;
如果非要物理删除,那就做好删除记录,尤其是当前删除的主键ID。记录好这个以后取表中的ID,取所有删除过的ID,排序,还是能算出下一个ID的。
在插入数据的时候,图片地址要用到id值,可以用什么方法(因为后几条数据已经删除,再插入数据id已经80多了)
@我却醉的像条狗: 你这种情况属于中途发现的问题,如果是一开始合理设计,就可以避免;所以目前有个办法,就是,先insert操作,插入数据,但是不记录图片地址,等insert操作完成以后获取到这个最大的ID,然后做update操作即可。
写sql查出最大Id,不过需要注意原子性,怕查完后在插入前这个id已经改变。另外,我有一点不明白,为什么要在插入前获取id?
因为我要插入的数据有一个字段要用到这条数据的id值
@我却醉的像条狗: 如果A里面引用了B,不应该是先插入B然后再插入A吗,如果先插入了A,B没有插入成功,还要再删除A?
写个 sql 语句获取:
select top 1 id from tablename with(nolock) order by id desc
如果要进行新增或者修改,可以用用 merge 语法
插入前获得,不就是插入前最大id+1么,不过要注意原子性,可能其他线程又插入数据导致最大id变了。
再插入数据之前获取这个数据的标识这种情况没见过,应该是有逻辑问题,可以避免的
现在我再插入数据,id已经是80多了,中间那几条我都已经删了,出入数据的时候,图片地址需要用到对应的id值
@我却醉的像条狗: 用id对应图片名和图片路径你觉得有用么。。。
既然图片路径都已经存到表里面了,用的时候直接根据id或者商品名获取图片路径就行了,图片路径具体是什么都一样
你插入的时候是一条一条的插哇,直接inser后返回id,然后在拼接图片地址,再通过id进行更新,我觉得你肯定是这样的想法
先把除了图片以为的信息插入然后直接返回这个id ,之后再用这个id把图片信息字段更新一下就好了
这样的连续编号毫无意义,假如现在你有9条数据,编号分别是1,2,3,4,5,6,7,8,9,然后把编号2删除了,难不成还要重新全部编号?id编号只要有序就行了,不一定要连续。
IDENT_CURRENT('TableName')为当前的最大标识值,
IDENT_INCR('TableName')为设置的标识值增量,
你可以这样写
INSERT INTO TableName(IDENT_CURRENT('TableName') +IDENT_INCR('TableName'))
你可以在插入数据之前先查一遍,查出来id desc 然后limit 1 取出的就是现在表里你要插入数据的上一条的id