回 帖 发 新 帖 刷新版面

主题:mysql数据库里auto_increment字段的问题

一个mysql数据库里,有一个id的字段,设为auto_increment,在对这个数据库进行了多次操作后(比如删除),这个字段的值变得太乱,想重新按原来的录入顺序进行编号,并且以后录入的数据继续在整理后的值上递增,该怎么实现呢?

比如:
数据库里有5条数据,id字段的值为1-5,多次操作后第2和第5条数据被删除,只剩3条数据
造成找不到id=2的数据,新录入数据的id从6开始递增

想要的结果:
在多次操作后进行整理(不知道是不是要用到有关数据库的编程),剩下的三条数据的id值为1-3,新录入数据的id从4开始递增

不知道怎么样才能实现,希望大家指点指点。

谢谢大家的帮助,非常感谢!

回复列表 (共4个回复)

沙发

不能的  
auto_increment 就是一直递增下去   不能重新开始

并且id的值是不能修改的   

你看看你的sql语句的 update  有没有修改这个字段   有的话会出错的。。所以是不能修改id字段的

板凳

[quote]不能的  
auto_increment 就是一直递增下去   不能重新开始

并且id的值是不能修改的   

你看看你的sql语句的 update  有没有修改这个字段   有的话会出错的。。所以是不能修改id字段的[/quote]

谢谢你的回答,但是id的值是可以改的

3 楼

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 楼

# plan 2:

alter table t drop column id;
alter table t add column id int auto_increment primary key first;

我来回复

您尚未登录,请登录后再回复。点此登录或注册