我在这里完全失败了。我有两个数据库。一个在我的localhost站点上,我用于开发,一个在我的远程站点,我用于我的实时(生产)站点。我通过phpMyadmin管理它们。正如我几个月来一直在做的那样,当我需要更新实时站点时,我会转储相关数据库并从我的localhost站点导入数据库。
现在,无论我尝试什么,我都会遇到这个错误:
错误 SQL查询:
--
-- Dumping data for table `oc_address_type`
--
INSERT INTO `oc_address_type` ( `address_type_id` , `address_type_name` )
VALUES ( 1, 'Billing' ) , ( 2, 'Shipping' ) ;
MySQL说:文档
#1062 - 键'PRIMARY'重复输入'1'
我尝试在我的localhost上创建一个新的空白数据库,然后导入到相同的结果中。我已经验证了所有表和索引,但在那里找不到任何错误。
任何建议,因为我完全失败,直到这个问题得到解决。
顺便说一句,我正在完全删除所有表并导入结构和数据。这一直持续到今天。
答案 0 :(得分:8)
你需要使用drop语句进行转储。该表存在且已有数据,您尝试插入更多相同的数据。我不是100%肯定phpmyadmin但转储将有一个选项“添加删除表”语句
答案 1 :(得分:6)
使用“mysqldump --insert-ignore ...”将您的数据库转储到localhost上,然后尝试在您的直播计算机上使用phpmyadmin导入。
或尝试使用命令行工具连接到您的实时数据库(将数据库配置为能够首先从“localhost”以外的其他主机进行连接!)
然后你可以试试以下:
$ mysql -f -p< yourdump.sql
使用-f“force”您可以在导入期间忽略错误。这与将“--force”参数添加到“mysqlimport”相同。
答案 2 :(得分:3)
问题与您的文件有关 - 您正在尝试使用副本创建数据库 - 在文件顶部您会看到如下内容:
创建数据库,如果不存在* THE_NAME_OF_YOUR_DB *默认字符集latin1 COLLATE latin1_general_ci;使用* THE_NAME_OF_YOUR_DB *;
并且我确定你已经拥有一个具有此名称的数据库 - 在同一台服务器中 - 请检查,因为你试图覆盖!!只需更改名称或(更好)删除此行!
答案 3 :(得分:1)
对我来说,foreign_key_checks和truncate table选项很有用。
SET foreign_key_checks = 0;
TRUNCATE `oc_address_type`;
SET foreign_key_checks = 1;
运行上面的sql脚本,然后导入。
答案 4 :(得分:0)
我有同样的问题,我的问题是我有一个名为unique_id
的主键列,当您尝试在该主键列中添加两个相同的值时,它会返回以下错误。< / p>
主键列的数据都假设不同,因此我将1
改为3
,但错误消失了。
您的MySql没有损坏,就像以前的答案和评论一样。
答案 5 :(得分:0)
您需要删除任何以前覆盖的表格。如果要对所有表执行完全还原,请删除所有现有表。
答案 6 :(得分:-1)
我遇到了同样的问题,我删除了表并重建了数据库,然后解决了问题。