主题:mysql数据库里auto_increment字段的问题
gahp
[专家分:0] 发布于 2008-02-25 23:04:00
一个mysql数据库里,有一个id的字段,设为auto_increment,在对这个数据库进行了多次操作后(比如删除),这个字段的值变得太乱,想重新按原来的录入顺序进行编号,并且以后录入的数据继续在整理后的值上递增,该怎么实现呢?
比如:
数据库里有5条数据,id字段的值为1-5,多次操作后第2和第5条数据被删除,只剩3条数据
造成找不到id=2的数据,新录入数据的id从6开始递增
想要的结果:
在多次操作后进行整理(不知道是不是要用到有关数据库的编程),剩下的三条数据的id值为1-3,新录入数据的id从4开始递增
不知道怎么样才能实现,希望大家指点指点。
谢谢大家的帮助,非常感谢!
回复列表 (共4个回复)
沙发
zengsi00 [专家分:400] 发布于 2008-02-26 18:09:00
不能的
auto_increment 就是一直递增下去 不能重新开始
并且id的值是不能修改的
你看看你的sql语句的 update 有没有修改这个字段 有的话会出错的。。所以是不能修改id字段的
板凳
gahp [专家分:0] 发布于 2008-02-27 05:22:00
[quote]不能的
auto_increment 就是一直递增下去 不能重新开始
并且id的值是不能修改的
你看看你的sql语句的 update 有没有修改这个字段 有的话会出错的。。所以是不能修改id字段的[/quote]
谢谢你的回答,但是id的值是可以改的
3 楼
idealistic33 [专家分:8030] 发布于 2008-11-27 01:02:00
create table t(
id int not null auto_increment primary key,
v int not null
);
insert into t(v) values(10), (20), (30), (40), (50);
select * from t;
delete from t where id % 2 = 0;
select * from t;
update t
join (select id, (select count(*) from t t0 where t0.id <=t1.id) newid from t t1) tx on t.id = tx.id
set t.id = tx.newid;
select * from t;
alter table t auto_increment = 0;#如果auto_increment=值小于max(id),ID从max(ID)+1开始计数
insert into t(v) values(1000), (2000);
select * from t;
4 楼
idealistic33 [专家分:8030] 发布于 2008-12-07 14:00:00
# plan 2:
alter table t drop column id;
alter table t add column id int auto_increment primary key first;
我来回复