2 ouyangsixian ouyangsixian 于 2017.01.02 10:34 提问

SQL 数据插入失败,自增ID被占用 2C

数据库有一个表ID使用的是自增长,数据插入失败自增ID会被暂用,这样数据的ID就不是连续的,有什么方法可以让数据ID连续

9个回答

HuChaoQing
HuChaoQing   2017.01.02 11:24

插入数据,不管失败或成功,数据库尝试生成一个ID,失败也是存在的,所以想连续不可能的

ZTZY520
ZTZY520   2017.01.02 11:29

不要用id自增长,自己在插的时候获取最大的id。这样子有一个缺点,就是有点麻烦,而且还会影响程序速度

ZTZY520
ZTZY520 回复ouyangsixian: 这个没有涉及到改结构啊。在插数据之前加一重操作而已
11 个月之前 回复
ouyangsixian
ouyangsixian 关键数据库的结构我们不能修改。
11 个月之前 回复
qq_29566841
qq_29566841   2017.01.02 11:36

你好!要解决这个问题,需要在数据库中创建一个存储过程,在存储过程中先查出该表最后一条记录id,加1后作为本次新插入数据的id。很简单的。

ouyangsixian
ouyangsixian 你这样就是要取消ID的自增长,但是表结构我们无法修改
11 个月之前 回复
baij1230
baij1230   2017.01.02 12:18

使用同步外加取id最大值+1
实际上最好的方法是UUID而不是自增主键

lshstyle
lshstyle   2017.01.02 12:22

oracle建议使用sequence,mysql有自增主键属性

Tiger_Zhao
Tiger_Zhao   Rxr 2017.01.03 10:46

丢掉“洪荒级”老师教你的单机单用户设计思想,应该从多用户环境来看待问题。
id不保证连续才是最合理的。

sinat_35134348
sinat_35134348   2017.01.03 12:47

要解决这样的问题,需要在数据库中创建一个存储过程,在存储过程中先查出该表最后一条记录id,加1后作为本次新插入数据的id。很简单的。
存储过程(简单){
获取最后一个ID
}
insert into xxpp(ID) values(存储过程+1)

qq_33921960
qq_33921960   2017.01.05 15:41

数据插入失败自增ID会被暂用,用事物回滚可以吗?这样数据库就没有修改,其他情况类似,自定义异常,如果某个条件下发生此异常就回滚,不知道您是不是这个
意思呢。

guwei4037
guwei4037   Ds   Rxr 2017.01.02 10:39

定义GetMaxID()方法,每次插入就是GetMaxID()+1这样.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!