我已经遇到过这个问题多次,和modonoghue有一个有效的方式来处理它通过删除您的表和完全重新创建它们。
问题&的通用解决方案
基本上正在发生的事情是,你正在尝试运行正在将值插入到已经存在的主键的INSERT语句 - 从而给你重复键的错误。数据库不知道如何处理具有相同键的多个条目,因为SQL逻辑基于具有完全唯一的主键的每个“行”。
你想要什么做的是所有的值保存到导出的SQL文件,因为,当您再次导入该文件,删除所有现有值的查询(假设你想将它恢复到并且不用担心在导出日期和导入日期之间保存的数据!)和插入所有导出的值...或以某种方式避免尝试添加具有现有密钥的新条目(请参阅以下内容) 。
一种方法导出一个特定的数据库(TRUNCATE):
- 换句话说,当你使用phpMyAdmin来导出SQL文件,单击“自定义 - 显示所有可能的选择”。
- 在“格式特定的选项” 确保“结构和数据”被选中(否则你可能最终下探表和不具有数据将它们与恢复!)
- 在“数据创建选项“选择”插入前截断表“ - 这将删除表中的所有现有数据。
导入时,所有的现有数据将在每个表(TRUNCATE)被删除,所导出的数据将被写回表(INSERT),但自己不会被删除的表(DROP) 。
忽略VS TRUNCATE(替代路线)
你应该能够跳过上述步骤3(TRUNCATE),而是选择复选框“而不是INSERT语句使用......”“INSERT语句忽略”
基本上,“IGNORE”只会跳过导出数据中的重复项,并阻止您删除现有数据。如果您只想添加丢失的数据,而不删除自上次导出以来更改/添加的数据,则这很好。
超级用户(对重复密钥更新)
还有一个INSERT INTO ...对重复密钥更新......这允许你告诉查询到底该怎么做,如果有一个重复键。这可以防止您忽略具有相同键的两个条目,这些键可能不是完全相同的条目。然而,设置正确会更复杂。
尝试使用命令行?它更安全,只是一条线路命令。你可能会发现很多文档。它也更快。 –
我无法在我的共享主机上访问。 – TheShadyOneHD
总有一些方法。询问你的主人。找出命令行访问权限。 –