发新话题
打印

[新鲜发布] discuz 升级出现Duplicate entry 'xxx' for key 1 的解决办法

discuz 升级出现Duplicate entry 'xxx' for key 1 的解决办法

查看数: 70 回复数: 1 最新回复

与好友共享:

内容简介:点击关闭

my73从leadbbs转换到discuz4.1是我做的,现在mwf想升级到5.0,他自己弄说又错误,我就花时间弄了下.
  由于my73是从leadbbs导入到dz4.1,我按照升级步骤升级,发现 在升级程序运行至第3步出错,出错的表是cdb_members,用户表,错误类型就是标题上那个,我查阅一些资 ...
my73从leadbbs转换到discuz4.1是我做的,现在mwf想升级到5.0,他自己弄说又错误,我就花时间弄了下.
   由于my73是从leadbbs导入到dz4.1,我按照升级步骤升级,发现 在升级程序运行至第3步出错,出错的表是cdb_members,用户表,错误类型就是标题上那个,我查阅一些资料,这个说得最详细:

    分析:索引如果是primary unique这两两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯一性。否则就会产生这个错误。
一般发生在对数据库写操作的时候,例如Discuz!4.1论坛程序要求所有会员的用户名username必须唯一,即username 的索引是unique,这时如果强行往cdb_members表里插入一个已有的username的记录就会发上这个错误,或者将一条记录的 username更新为已有的一个username
改变表结构的时候也有可能导致这个错误。例如 Discuz!4.0论坛的数据库中cdb_members.username 的索引类型是 index 这个时候是允许有相同username的记录存在的,在升级到4.1的时候,因为要将username的索引由原来的index变为unique。如果这 时cdb_members里存在有相同的username的记录,那么就会引发这个错误。
导出数据据时有时会因为一些原因(作者目前还不清楚)导致同一条记录被重复导出,那么这个备份数据在导入的时候出现这个错误是在所难免的了。
修改了auto_increment的值,致使“下一个 Autoindex”为一条已经存在的记录
解决:两种思路,一是破坏掉唯一性的索引。二是把重复的数据记录干掉,只保留一条。很显然第一种思路是不可取的。那么按照二的思路我们得出以下几种解决方法,对应上面的i ii iii

按照错误提示里的信息到数据库中将重复的记录删除,仅保留一条即可。之后继续执行升级操作。
这种情况发生的概率很小,可以用文本编辑器打开备份文档,查找重复的信息。将其多余的拿掉,仅保留一条即可。
查询出表中auto_increment最大的一条记录,设置auto_incerment比其大一即可。

    我想了半天没有想到好的办法去查找相同的数据项,因为my73的用户超过1w了,数据很大,后来决定把这个表导出到本地,然后用编辑器打开sql文件,类似下面的格式:
Copy
语言代码:
insert INTO `cdb_membersVALUES ('1''Admin''7f223d4dc8feaee07c215ed1ddea3049'''0110'''220.170.15.81'1079193600'218.75.226.252'11585587331158559024115849815259601554741275731011010000000'52myxtu@163.com''0000-00-00'1000''03111'9999'00),........,

想了下既然id是自动增加,我把插入语句中id全面改成空不就可以顺次插入了?于是我使用正则表达式
('[1-9]*',  将这些全部替换成('',然后再将这个表清空,最后再导入这些语句,再次运行升级程序,一切Ok了.
你现在是游客:请登录或者注册

TOP

最新网站秀: (还等什么?马上加入我们吧! 快速加入

 华中师范大  盱眙吧1  南邮风云   夜族网游公  在日中华情  生活大家坛  智商250  塞班智能手  论剑社区  潮州论坛  灵下异度  封开家园 
用户正在观看: 热门标签
美女人体艺术绝
杀破狼
樱之炫视频教程——五
雨儿短裙热舞
情圣【国语中字】DV
作品源自网络,请支持正版


【天下足球】献给巴乔


爆强的婚礼迎娶车队


【看球听歌】:意大利


[天下足球音乐MV]
发新话题