MySQL修改表自增ID(AUTO_INCREMENT)

原创 · 金汉江 · 2020-04-21

今天有一张数据库表新加了一条数据,后来想把这条数据ID值调小了。因为ID值有特殊用处(在程序代码中有特殊判断)

表结构如下:

CREATE TABLE `AdminGroup` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL COMMENT '角色名',
  `timeLastModified` datetime DEFAULT NULL COMMENT '最近修改时间',
  `timeCreated` datetime NOT NULL COMMENT '创建时间',
  `description` varchar(254) DEFAULT NULL COMMENT '描述',
  `rights` text COMMENT '权限',
  `rightsText` text COMMENT '权限描述',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='管理员角色'

id在10以下的未完成用完,刚加的一条数据id为15,这个id值改为5,其实15这个值(AUTO_INCREMENT=16,16是下次新添加数据的id值)相当于未使用

有强迫症的我。想自增id既然没就自增值改回去。网上一堆的修改方法

ALTER TABLE AdminGroup AUTO_INCREMENT = 15;

然后看到是执行成功了,但查看表结构依然没变化。

后来发现

  • 在InnoDB引擎下,如果修改的目标值小于当前数据库中ID的最大值,则数据库不会有任何变化。

  • 在MyISAM引擎下,如果修改的目标值小于当前数据库中ID的最大值,则AUTO_INCREMENT会被设置为该最大值。

我的表结构是InnoDB类型,改小所以没变化, 所以我就先把表引擎改为MyISAM, 调整AUTO_INCREMENT, 然后再改为InnoDB

ALTER TABLE AdminGroup ENGING = InnoDB;
ALTER TABLE AdminGroup AUTO_INCREMENT = 15;
ALTER TABLE AdminGroup ENGING = MyISAM;