日期:2014-05-17  浏览次数:20553 次

向数据库里插入新的数据id号为什么不是从头算起??
Java code

create sequence seq_article increment by 1 start with 1;
create table article(
id int primary key not null,
pid int,
rootid int,
title varchar2(255),
cont varchar2(4000),
pdate date,
isleaf int
);


insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 0,1,'蚂蚁大战大象','蚂蚁大战大象',sysdate,1);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 1,1,'大象被打趴下了','大象被打趴下了',sysdate,1);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 2,1,'蚂蚁也不好过','蚂蚁也不好过',sysdate,0);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 2,1,'瞎说','瞎说',sysdate,1);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 4,1,'没有瞎说','没有瞎说',sysdate,0);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 1,1,'怎么可能','怎么可能',sysdate,1);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 6,1,'怎么没有可能','怎么没有可能',sysdate,0);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 6,1,'可能性是很大的','可能性是很大的',sysdate,0);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 2,1,'大象进医院了','大象进医院了',sysdate,1);
insert into article (id,pid,rootid,title,cont,pdate,isleaf) values(seq_article.nextval, 9,1,'护士是蚂蚁','护士是蚂蚁',sysdate,0);
COMMIT;






刚开始建表的时候向数据库里插入了这些数据,然后在JSP页面里通过发表新主题又添加了一些新的数据,后来删的时候把上边添加的数据也删了,现在又把insert语句在数据库里执行了一下,插是插上去了,可是id号不是从1开始算的,是从以前加过的数据紧接着id号开始插入的,这是什么情况?
怎样实现使新添加的数据的id号覆盖到已删除的那个id号上??

------解决方案--------------------
seq_article.nextval 这是个序列,即便你把表的数据删除了,甚至把整个表都删除了,可是这个序列并没有重置吖。。。

我个人对序列不是很了解,仅仅知道怎么用而已,如果要重置序列的话,我也没有好的解决方案,我会先删除,然后再重建该序列。。。
------解决方案--------------------
因为你已经执行seq_article序列,虽然你删除了数据,但是他的序列被调用了,他的自增是要继续的,你如果不想他的ID在原来的基础上增加,你可以删除这个表,和这个序列,然后再建表建序列,那样执行后就不会是在你之前删除的基础上增加了,you know???
------解决方案--------------------
重头插起会带来很严重的问题:

比如,你有一篇文章,id号为3,产生的连接假设如下:http://www.ticmy.com/?p=5

你在其它文章里又引用了这篇文章的连接,结果有一天你删掉了id为5的文章,然后写了一篇新文章,又出现一个5,那个引用的地方岂不是出错了
------解决方案--------------------
实际上这个问题很好理解。

比如一张表中有 1 亿零 1 条记录,我删除了其中的一条,难道另外 1 亿条数据的主键需要重新编排?

主键是无意义的数据,只是用于标识一条数据之用,并不需要是连续的数字,使用惟一的字符串也是可以的,比如 UUID