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,为什么啊?谁帮我解决下呗。。。
展开
展开全部
数据库实现自增长都是通过一个变量来实现的,就是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的位置。
展开全部
将ID设置为INT就OK, CREATE TABLE TB_NAME( ID INT IDENTITY(1,1), ) IDENTITY是自动增长参数,(1,1)表示初始值为1,行增量为1 改成
追问
id 是int啊?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1、你可以用show create table tablename;查看AUTO_INCREMENT的值。
插入5行数据后,AUTO_INCREMENT=6,即使你把所有的数据都删除。
2、执行alter table tablename AUTO_INCREMENT=5;再插入即可。
插入5行数据后,AUTO_INCREMENT=6,即使你把所有的数据都删除。
2、执行alter table tablename AUTO_INCREMENT=5;再插入即可。
追问
哥哥,我说的id值,1,2,3,4,5, 只是打个比方,那要是有个3000个id值得表,你说我到时候前台插入数据,我还去查么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
alter table tbname auto_increment=5;
这样就能重新从5开始了
这样就能重新从5开始了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询