mysql数据表中,有几条记录主键id为1,2,3,4,5,把id为5的这条数据删了。如果下次再insert一条数据的话

mysql数据表中,有几条记录主键id是1,2,3,4,5,我设置了AUTO_INCREMENT,但是当我把id=5的数据删掉后,我又insert一条数据,此时id竟然是... mysql数据表中,有几条记录主键id是1,2,3,4,5,我设置了AUTO_INCREMENT,但是当我把id=5的数据删掉后,我又insert一条数据,此时id竟然是6,不是5,为什么啊?谁帮我解决下呗。。。 展开
 我来答
帐号已注销
2012-03-21 · TA获得超过4630个赞
知道大有可为答主
回答量:1345
采纳率:50%
帮助的人:1639万
展开全部
数据库实现自增长都是通过一个变量来实现的,就是AUTO_INCREMENT。每次插入一条数据,变量加1。你删除数据它不可能回滚,试想如果你觉得删除一条数据它就减1,你删除最大的那个ID自然没有问题,但如果你删除的是3而不是5,数据库无论将它变成5或者3都不合适,因为如果是5,显然ID为5的数据已经存在,你再次插入数据会违反主键唯一性;如果是3呢,新插入两条数据时,同样有这个问题,所以它只能不变。而且你非要再在5那插一条数据意义也不大,你可以通过指定ID来插入数据,不需要改变自增变量。在你不能确定有没有ID值比你要改的ID大时,最好不要随便改自增变量。
更多追问追答
追问
也就是说:我有1,2,3,4,5,五条数据,我删掉了id=5的数据(最大id值),我再插入一条新数据,数据表会自动把它编号为id=6,是么?这是正常的么?
追答
对,这很正常。auto_increment只会在你插入数据的时候自增,不会在你删除的时候减1。数据库这样处理是合理的,因为数据库没办法预先知道你删除的是哪条数据,如果有100条数据,你删除id为5的,难道数据库还把auto_increment返回到5吗,显然不行,因为这样做的话,后面你再插入数据,自增id为5,这个没问题,可以插入;可是插入id为5的后,auto_increment编成6,如果你再插入数据,就是插入id为6的,但先前已经存在id为6的数据,这样的话数据库就不能插入数据了。

你可以通过指定id来插入数据
insert into tablename(id,others) values(5,others);
这样就可以没有任何影响的将数据插入到id为5的位置。
百度网友0b3b3b0dd0
2012-03-21 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.6万
采纳率:0%
帮助的人:3396万
展开全部
将ID设置为INT就OK, CREATE TABLE TB_NAME( ID INT IDENTITY(1,1), ) IDENTITY是自动增长参数,(1,1)表示初始值为1,行增量为1 改成
追问
id 是int啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wallcopper
2012-03-21 · TA获得超过3447个赞
知道大有可为答主
回答量:1986
采纳率:86%
帮助的人:1818万
展开全部
1、你可以用show create table tablename;查看AUTO_INCREMENT的值。
插入5行数据后,AUTO_INCREMENT=6,即使你把所有的数据都删除。
2、执行alter table tablename AUTO_INCREMENT=5;再插入即可。
追问
哥哥,我说的id值,1,2,3,4,5, 只是打个比方,那要是有个3000个id值得表,你说我到时候前台插入数据,我还去查么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汪雄辉拉
2012-03-21 · TA获得超过2966个赞
知道大有可为答主
回答量:1430
采纳率:0%
帮助的人:1644万
展开全部
alter table tbname auto_increment=5;
这样就能重新从5开始了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式