mysql数据表中,有几条记录主键id是1,2,3,4,5,我设置了AUTO_INCREMENT,但是当我把id=5的数据删掉后,我又insert一条数据,此时id竟然是6,不是5,为什么啊?谁帮我解决下呗。。。
也就是说:我有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=1 name=1// 第一行
id=2 name=2 //第二行
id=3 name=3//第三行
delete id=3 后,又insert id=4:之后输出,不就变成断行了?
id=1 name=1// 第一行
id=2 name=2 //第二行
//第三行
id=4 name=4 //第四行
如何解决这个问题呢?我是菜鸟,求指教!!!!!!!!
从数据库输出数据到页面肯定不是按你说的那样输出,一般都是从数据拿到所有要输出的数据,放在数组之类的容器里,然后根据容器的下标来输出。在放进容器的时候,你可以按照数据的id排序,这样输出的时候就是按id的顺序输出了。
比如说你拿到所有的数据:
select * from tablename order by id;
编程语言都有能拿到结果集的类,这样你就得到了所有的数据。这些数据你经过处理,就可以放进数组或是集合等容器,然后你要输出这些数据的时候,只要把集合或容器中的数据显示在页面上。由于容器都是通过下标来访问的,只要用for或者while,参数就是下标,肯定不会出现某一行为空的现象。
所以说这个所谓的断行,你根本不用考虑,只要做一段时间的程序,就知道这根本不是问题。
id 是int啊?
哥哥,我说的id值,1,2,3,4,5, 只是打个比方,那要是有个3000个id值得表,你说我到时候前台插入数据,我还去查么?