解决 mysql 导入时重复的主键
Posted
技术标签:
【中文标题】解决 mysql 导入时重复的主键【英文标题】:Resolving a duplicate primary key on mysql import 【发布时间】:2012-03-25 12:39:47 【问题描述】:我希望将 cmets 表从一个 WordPress 站点附加到另一个站点。用户不同。当我将 cmets 从站点 B 导入到 A 时,我遇到了重复密钥问题; comment_id 已被占用。
那么我该如何解决这个问题并在表格中附加一个简单的 .sql 文件呢?我是否必须获取用户信息,生成新用户,检查在站点 B 上创建的 cmets,提取内容和 postID,然后返回站点 A 并为新创建的用户重新创建评论!?
真是头疼!谢谢。
【问题讨论】:
【参考方案1】:如果您唯一的问题是重复键问题,请在之后转到 sql 文件的末尾
ENGINE=MyISAM
并做到
ENGINE=MyISAM AutoIncrement=a nubmer above the last id in the new database
或
在数据库 A 中查询最后一个 id,然后添加一个并在新的插入查询中使用它。
示例 1:
CREATE TABLE IF NOT EXISTS `movies` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`year` int(4) NOT NULL,
`size` varchar(255) NOT NULL,
`added` date NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `title` (`title`,`year`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
我的转储中的插入:
INSERT INTO `movies` (`title`, `year`, `size`, `added`) VALUES
('[REC] 2', 0, '716688', '2011-09-23'),
('5 Days of War', 0, '1435406', '2012-01-09'),
('[REC]', 0, '1353420800', '2011-11-06');
看看我如何没有在我的包含中包含PRIMARY KEY (id)
,但它仍会检查我的UNIQUE KEY
并查看标题是否存在。只是一个小演示,希望能有所帮助。如果您的表已经存在于新数据库中,那么只需跳到插入并且不包含主键,它将在新插入时自动设置为下一个可用值。
【讨论】:
所以按照你的第一种方法,说旧数据库以主键 5 结尾,你说 ENGINE=MyISAM AutoIncrement=6,新数据库中的其余条目将被导入为 6, 7 , 8 等等? 正确,当您设置自动增量时,它从指定的数字开始,如果您没有包含它,它会自动从 1 开始并向前移动,如果您尝试更新,这就是导致错误的原因从垃圾场。只是不要在转储的插入中包含 primary_key,它应该像一个魅力一样工作。我将从我的一个数据库中编辑并发布一个演示。以上是关于解决 mysql 导入时重复的主键的主要内容,如果未能解决你的问题,请参考以下文章
关于sqlite数据库导入了一半时,遇到重复id停止了。所以操作回滚,但剩下db-journal文件。怎么解决冲突哇