首页 新闻 会员 周边 捐助

如何获取自动增长列的最大ID值即再插入一条数据的id

0
悬赏园豆:10 [已解决问题] 解决于 2019-07-10 09:31

假如现在我有4条数据,编号分别是1,2,3,4,现在我把第四条删了,再插入一条,插入的数据id值是5,有没有什么办法或者函数能获取到这个5;我知道last_insert_id()这个函数,但需要插入数据才行,我现在想要在插入数据之前获得。

我却醉的像条狗的主页 我却醉的像条狗 | 初学一级 | 园豆:82
提问于:2019-06-23 21:38
< >
分享
最佳答案
0

不好取,建议使用row_number对表重新排序,加上自增的连续的ID,这样当我获取当前表最大的那个ID以后,对值进行+1就是下一个ID了;
还有一种做法就是,删除的时候做逻辑删除,这样ID永远是连续的;
如果非要物理删除,那就做好删除记录,尤其是当前删除的主键ID。记录好这个以后取表中的ID,取所有删除过的ID,排序,还是能算出下一个ID的。

收获园豆:10
顾星河 | 大侠五级 |园豆:7262 | 2019-06-24 09:17

在插入数据的时候,图片地址要用到id值,可以用什么方法(因为后几条数据已经删除,再插入数据id已经80多了)

我却醉的像条狗 | 园豆:82 (初学一级) | 2019-06-24 10:19

@我却醉的像条狗: 你这种情况属于中途发现的问题,如果是一开始合理设计,就可以避免;所以目前有个办法,就是,先insert操作,插入数据,但是不记录图片地址,等insert操作完成以后获取到这个最大的ID,然后做update操作即可。

顾星河 | 园豆:7262 (大侠五级) | 2019-06-24 10:27
其他回答(8)
0

写sql查出最大Id,不过需要注意原子性,怕查完后在插入前这个id已经改变。另外,我有一点不明白,为什么要在插入前获取id?

会长 | 园豆:12461 (专家六级) | 2019-06-24 08:42

因为我要插入的数据有一个字段要用到这条数据的id值

支持(0) 反对(0) 我却醉的像条狗 | 园豆:82 (初学一级) | 2019-06-24 10:09

@我却醉的像条狗: 如果A里面引用了B,不应该是先插入B然后再插入A吗,如果先插入了A,B没有插入成功,还要再删除A?

支持(0) 反对(0) 会长 | 园豆:12461 (专家六级) | 2019-06-24 10:14
0

写个 sql 语句获取:

select top 1 id from tablename with(nolock) order by id desc

如果要进行新增或者修改,可以用用 merge 语法

三人乐乐 | 园豆:4819 (老鸟四级) | 2019-06-24 09:28
0

插入前获得,不就是插入前最大id+1么,不过要注意原子性,可能其他线程又插入数据导致最大id变了。
再插入数据之前获取这个数据的标识这种情况没见过,应该是有逻辑问题,可以避免的

小光 | 园豆:1766 (小虾三级) | 2019-06-24 09:43

现在我再插入数据,id已经是80多了,中间那几条我都已经删了,出入数据的时候,图片地址需要用到对应的id值

支持(0) 反对(0) 我却醉的像条狗 | 园豆:82 (初学一级) | 2019-06-24 10:14

@我却醉的像条狗: 用id对应图片名和图片路径你觉得有用么。。。
既然图片路径都已经存到表里面了,用的时候直接根据id或者商品名获取图片路径就行了,图片路径具体是什么都一样

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2019-06-24 14:08
0

你插入的时候是一条一条的插哇,直接inser后返回id,然后在拼接图片地址,再通过id进行更新,我觉得你肯定是这样的想法

代码中透露着杀气 | 园豆:221 (菜鸟二级) | 2019-06-24 14:43
0

先把除了图片以为的信息插入然后直接返回这个id ,之后再用这个id把图片信息字段更新一下就好了

雷。 | 园豆:775 (小虾三级) | 2019-06-24 15:11
0

这样的连续编号毫无意义,假如现在你有9条数据,编号分别是1,2,3,4,5,6,7,8,9,然后把编号2删除了,难不成还要重新全部编号?id编号只要有序就行了,不一定要连续。

海之殇 | 园豆:500 (菜鸟二级) | 2019-06-27 09:22
0

IDENT_CURRENT('TableName')为当前的最大标识值,

IDENT_INCR('TableName')为设置的标识值增量,

你可以这样写
INSERT INTO TableName(IDENT_CURRENT('TableName') +IDENT_INCR('TableName'))

熊泽-学习中的苦与乐 | 园豆:2272 (老鸟四级) | 2019-06-27 17:14
0

你可以在插入数据之前先查一遍,查出来id desc 然后limit 1 取出的就是现在表里你要插入数据的上一条的id

小ྀ青ྀ年້ | 园豆:92 (初学一级) | 2019-07-08 10:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册