第三次放一百分,过来接(100分)

  • 主题发起人 主题发起人 shineseth
  • 开始时间 开始时间
S

shineseth

Unregistered / Unconfirmed
GUEST, unregistred user!
假设我们设id为自动增长的字段会遇到这样的情况,当你加入10条记录时id为1-10
没错,此时如果你删除其中几条后,它不会自动为现有记录刷新id值,也就是说如果
你删了第四条后,它不会把id5-10的整到4-9,之后加入的记录也是从id11开始,如何
能做删除第四条后,会自动把id5-10刷新成id4-9,然后加入的记录也是从id10开始呢
棘手啊,如果能在mysql解决这个问题最好,其它数据库能解决也可以。绝对绝对放分
 
不用自增字段 手动计算序号。
 
你就自己计算了再更新,不要作为自增字段了。
 
你可以在记录中增加一个删除标记字段,用最后一条记录来更新要删除的记录,再将最后一条记录的删除标记设为真即可。
 
1、这是不可能的
2、如果你真的有这方面的特殊嗜好的话,可以不要用自增长类型的字段,自己定义一个全局数据,自己来控制。比如说你删掉了第四条,你可以自己从第五条开始一直到最后一条,每条的ID--。不过这样实在是自找麻烦。
3、敢问你到底为什么必须要这样做呢?
 
我感觉你做法不太好
干吗要自增
为什么不先计算,你有什么特别要求?
 
你专门用一个A表,在里面放一到一百万个顺序ID号
然后,你其它表(假设B表)在增加记录用时就从这个A表里取最小的出来用,同时删除该ID号记录,当在你B表里删除掉记录后,再把相应的ID号给增加进A表,
这样就能保证顺序号是一致的了。
 
发送 “SQL Server 中自动更新表的 id 序号” 到 180jyf@163.com
就有回复
 
真的, 发送 “SQL Server 中自动更新表的 id 序号” 到 180jyf@163.com
DELPHI盒子有下载!
 

我觉得app2001的这个方法不错
 
大富翁"jfyes"哪儿有?
 
之所以用自动ID是因为每个数据库产品肯定对自动ID的处理方法有些优化速度上肯定比自己
做来的快,为什么要让它重新编号是因为我定义它为int型如果让它这样增长下去总有一天会溢出,难道我们不能从数据库实现自动ID的处理手段上找到重新编号的方法吗。
 
-- --利用触发器自动更新表的序号的 SQL Script;

-- table name "dbo.jfyes" trigger name dbo.jfyes_trigger 必须字段
-- i_d是 primary key data type (int)
if object_id('dbo.jfyes_trigger')is not null
drop Trigger dbo.jfyes_trigger
go
create Trigger dbo.jfyes_trigger
on jfyes
for delete
as if @@rowcount<>0 --如果记录数不为0便执行
begin
declare @total int,@Cur int,@a1 int,@a2 int;
set @total=(select max(i_d) from jfyes);
set @Cur=(select i_d from deleted);

set @a2=0;
if @total<>@Cur --如果记录不是最后一条便执行
begin
if @total-@Cur=2 --如果记录是倒数第二条便执行
begin
while @a2<=2
begin

update jfyes set i_d=@Cur+@a2-1 where i_d=@Cur+@a2;
set @a2=@a2+1;
end;
end
else
begin
set @a1=@total-@Cur;
while @a2<=@a1+1
begin

update jfyes set i_d=@Cur+@a2-1 where i_d=@Cur+@a2;
set @a2=@a2+1;
end;
end;
end;

end;
 
只能自己写SQL 了,,楼上是个例子
 
SQL的自增字段就是这样的
楼主的问题,只好自己动手写代码解决了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部