分享

[ACCESS]自动编号的字段在删除记录后编号不连续的问题及其解决办法

 fruitapple 2010-06-30
问题:
 
[ACCESS]自动编号的字段在删除记录后编号不连续的问题及其解决办法
(

自动编号的字段在删除记录后编号不连续
比如原来有10条记录,删除其中第2条,序号2就变空号了
当表中某条记录被删除后,如何使后续的记录自动重新编号?

SQL SERVER 中可以暂时禁止自动编号的
也可已将TABLE2的自动编号字段的约束暂时不起作用:
SET IDENTITY_INSERT TABLE2 ON
INSERT INTO TABLE2 SELECT FROM TABLE1
SET IDENTITY_INSERT TABLE2 OFF

 

回答:

来源:(http://blog.sina.com.cn/s/blog_53f6ca5e01000b4o.html?retcode=0) - [ACCESS]自动编号的字段在删除记录后编号不连续的问题及其解决办法_便便_新浪博客

ACCESS 自动编号不存在自动将缺号补上的功能,并非 ACCESS 功能不全,而是您的在使用方法上错误了

关于自动编号和压缩数据库 
你必须理解,自动编号(长整型)的目的不是为了使记录号连续,其用途有2个
1、标识记录的唯一性
2、标识记录的生成顺序
基于上述原因,你想使用自动编号字段来表示连续的记录号本身这个思路就是错误的。

如何表示连续的记录号有以下几个办法:
1、再建立一个专门用来存放记录号的字段,比如 RecordNo
    添加记录时可以用 MAX(recordNO)+1 的方法。
    当要删除某条记录时,比如这条记录的recordNo=6,我们用

    

delete from table where recordNo=6

    来做。这样就会产生空号,然后再用

    

update table set recordno=recordno-1 where recordno>6

    即可

2、在表中不存放记录号的数据,用sql查询自动生成

select [id],a,b,c,(select count(*) from table table2 where table2.[id]<=table1.[id]) as recordno from table table1 order by [id]

    其中 [id] 字段为自动编号字段

 


问题:

ACCESS2000中 有一自动编号的字段ID,ID 已有值分别为1,2,3,4,5,6,7,将6,7删除后,再压缩数据库,再新加记录,在不同的电脑上会出现不同的情况如下:
1,新ID 为6,7,8,9
2,新ID 为8,9

在ID为1,2,3,4,5,6,7的情况下,将4,5删除后,再压缩数据库,再新加记录,在不同的电脑上会出现不同的情况如下:
3,新ID为4,5,然后是6(出错,因为是主键不能重复)
4,新ID为8,9。。。
请问哪中情况是正常的,其他不正常的原因是什么。谢谢!!

 

回答:

你说的几种情况全部属于正常

1、自动编号是由 JET  引擎来设置的
2、自动编号 会自动被作为主键,而且有不重复索引
3、你可以不要将自动编号作为主键以及不要建立索引,将索引改为无
4、自动编号的起始值和步进值都是可以用程序等方法更改的,不是固定的
5、虽然你更改了起始值和步进值,但是如果新生成的值违反了“主键”或者“索引”的约束会产生错误
6、默认情况下,即使删除了记录,这条记录的自动编号也不会恢复。

以下是对情况的分析
1、你使用了比如压缩修复、UPDATE、ALTER TABLE 等方法更改了初始值
2、默认情况下就是这样
3、因为使用了压缩修复等方法,导致初始值重新从4开始,但是增加到6的时候,原来记录里面已经存在6这个编号了,违反了主键约束,所以产生错误
4、默认情况下就是这样。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多