抱歉,评论被关闭
如何解决ALTER TABLE causes auto_increment resequencing ?
最近,升级Discuz! X2.5 到 Discuz! X3.2 升级过程中遇到如下错误:
升级SQL语句:
升级表 pre_home_notification 出错,请手工执行以下升级语句后,再重新运行本升级程序:
ALTER TABLE pre_home_notification CHANGE `id` `id` mediumint(8) unsigned NOT NULL AUTO_INCREMEN
Error: ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ‘16777215’ for key ‘PRIMARY’
Errno.: 1062
按照官网的手动的方法执行一样报错。
接下来我进入数据库查看 此表的结构 ,就明白了。
>show create table pre_home_notification
| pre_home_notification | CREATE TABLE `pre_home_notification` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`uid` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`type` varchar(20) NOT NULL DEFAULT ”,
`new` tinyint(1) NOT NULL DEFAULT ‘0’,
`authorid` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`author` varchar(15) NOT NULL DEFAULT ”,
`note` text NOT NULL,
`dateline` int(10) unsigned NOT NULL DEFAULT ‘0’,
`from_id` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`from_idtype` varchar(20) NOT NULL DEFAULT ”,
`from_num` mediumint(8) unsigned NOT NULL DEFAULT ‘0’,
`category` tinyint(1) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`id`),
KEY `from_id` (`from_id`,`from_idtype`),
KEY `uid` (`uid`,`new`),
KEY `category` (`uid`,`category`,`dateline`),
KEY `by_type` (`uid`,`type`,`dateline`)
) ENGINE=MyISAM AUTO_INCREMENT=39274822 DEFAULT CHARSET=gbk |
原因:id原来的类型int(10) 范围 应该上亿数量而更改成mediumint(8) 无符号的范围是0到16777215
本身AUTO_INCREMENT=39274822 已经超过了 更改的类型范围(0到16777215)。
解决办法 :估计官方是为了 优化,如果数据量大一些平台估计很多表都超过mediumint(8) 这个类型范围, 升级的时候,跳过的这个执行语句就行了。
本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=1974