当前位置:首页 » 数据仓库 » 数据库自增id不连续
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

数据库自增id不连续

发布时间: 2023-05-29 22:15:34

‘壹’ 从sqlserver05数据库中查出20至30条数据,其中ID是主键自增列,但并不连续,

select top 30 * from table where [id] not in (select top 20 [id] from table)

‘贰’ MySQl数据表中的ID设置为自增,为什么中间会出现ID编号不连续的情况

缺失的那些id的行都是被删除的行,新增加的行不会填补这些空缺!

‘叁’ 我想让数据库的自增ID在删除中间一条后,后边的ID可以自动连续下来。

alter table 表名 drop column 自增列名
alter table 表名 add 自增列名 int identity(1,1)

思想就是先手键前删除自亮游增列,再添加一毕清列自增列

‘肆’ sql 假如一个表有ID,Name两个字段,id为自增,但不连续,要查询第10到20行里Name值不重复数据

既然用了数据库,就要转变思路,学会数据库的逻辑。
虽然在物理存储的概念上来说是一行一行的,但逻辑上数据库中是没有行的概念的,所以说这个问从设计之初就有问题。
如果数据库结构已经确定了的话,用一句sql实现不了,可以用存储过程来实现,先按id排序,取出20行,再反过来取后面10个就可以了。

‘伍’ 数据库中有一个字段存取记录的id,从数据库中删除一条记录后,id变为不连续,如何解决,VC++环境中

看看或许有用:
/*-------------------------

*问题描述:表中采用了自增列删除记录会出现断号的情况,但是又想让歼茄它删除后自动重新编号?

*方法1:采用函数+触发器的方法替代IDENTITY的功能,并且解决断号问题

*方法2:采用存储过程(还是使用IDENTITY列)

------------------------------------*/

--创建实现自增列的函数

create function f_getID()

returns int

as

begin

return(select isnull(max(id),0)+1 from tb)

end

go

--创建表

create table tb(id int primary key default dbo.f_getID() ,name varchar(20))

go

--创建触发器,在删除表中的记录时,自动更新记录的id,解决断号的烦恼

create trigger t_s_anhao on tb

AFTER delete

as

declare @mid int

select @mid=min(id)-1

from deleted

update tb

set id=@mid,@mid=@mid+1

where id>@mid+1

go

--插入记录测试(只能一条做改渣条记录插入)

insert into tb(name) values('1哥')

insert into tb(name) values('2哥')

insert into tb(name) values('3哥')

insert into tb(name) values('4哥')

insert into tb(name) values('5哥')

insert into tb(name) values('6哥')

insert into tb(name) values('7哥')

insert into tb(name) values('8哥')

--显示插入的结果

select * from tb

--删除部分记纯悄录

delete from tb where name in('1哥','4哥','7哥','8哥')

--显示删除后的结果

select * from tb

/*--测试结果

id name

----------- --------------------

1 2哥

2 3哥

3 5哥

4 6哥

--*/

--删除环境

drop table tb

drop function f_getID

‘陆’ sql server 2012 自增列不连续怎么办

sql链接字条串
provider=sqloledb.1;persist
security
info=false;data
source=127.0.0.1,1433;user
id=username;pwd=passwd;initial
catalog=database,
username
数据库用户名,passwd
密码,database
对应的数据库,data
sourse是数据库的ip地址及端口号,请确保以上都是正确的。

‘柒’ mysql查询自增id不连续 怎么操作

只有几万条数据,那就好办多了,列举个笨方法如下

如果要一次性查出来,需要用递归了,因为不知道你中间的断点会有多少个,所以建议把这个表复制一份,直接亩姿对表进行删除操作

直接for循环

for($i ==1;$i<你的最大数据条数;$i++){

查询你的记录,是否有等于$i和$i+1的,如果这两条记录同时唯耐早存在就删指雀除$i编号

}

‘捌’ 为什么PostgreSQL的自增ID是非连续的

就像mysql 的uuid一样,每次select nextval('user_seq')都会亏消自动递增销或知的。就像楼主所说,可能你的事务没成功,但seq不会回滚,除非你rockback的时候设置一团袜下seq
INSERT INTO my_users(u_id,u_name)VALUES(nextval('user_seq'),'oschina');

‘玖’ 我要向一个表中插入数据,且这个表中的ID不是自动连续的,我插入的数据如何让其ID自动增长;

自增列的类型应为int或bigint型。可以设置起始和每次递增数。
如:create table [table1]
(
[id] [int] identity(1,1)...
)
这样每次插入则不需要为主键设置参数,数据库会根据设置的递增条件,自动给出主键值。
如以上代码所示,则第一次插入后主键为1,第二次为2,一次递增。
需要注意的是:如果这个表中有10条数据,主键为1-10不间断的数字,那现在要删除第十条数据,
继续携行插轮悔入的话,id则会变成11,而不是10。通俗的说就是主键使用过一次腊隐正将不会再次使用。

‘拾’ 数据库主键自增ID 删除后 出现断号 怎么让其重新顺号

这个是不可以的,几乎每一个数据库引擎都是按照这样一个模式进行序号的递增的。