如何解决ALTER TABLE causes auto_increment resequencing ?

分类:工作记,问题集 | 作者:凹凸曼 | 发表于2015/10/31 如何解决ALTER TABLE causes auto_increment resequencing ?已关闭评论

最近,升级Discuz! X2.5Discuz! 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

日志信息 »

该日志于2015-10-31 12:42由 凹凸曼 发表在工作记, 问题集分类下, 评论已关闭。

目前盖楼

抱歉,评论被关闭

« »