magento SQLSTATE [23000]:完整性约束违规:1062重复条目'363624'用于键'PRIMARY'

时间:2013-04-07 21:34:22

标签: mysql magento

我迁移了一个mgento安装,执行以下操作:

  1. 复制了所有文件
  2. 导出数据库
  3. 使用mysql workbench
  4. 导入数据库
  5. 将base_url更改为新域
  6. 将local.xml更新为正确的设置
  7. 现在我得到:

    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '363624' for key 'PRIMARY'
    

    我在数据库中搜索了此密钥363624,但它没有重复,因为消息显示

    我该如何解决这个问题?

7 个答案:

答案 0 :(得分:29)

这帮助了我(清除了一些表格):

输入您的Magento数据库并运行以下sql查询:

TRUNCATE dataflow_batch_export ; 
TRUNCATE dataflow_batch_import ; 
TRUNCATE log_customer ; 
TRUNCATE log_quote ; 
TRUNCATE log_summary ; 
TRUNCATE log_summary_type ; 
TRUNCATE log_url ; 
TRUNCATE log_url_info ; 
TRUNCATE log_visitor ; 
TRUNCATE log_visitor_info ; 
TRUNCATE log_visitor_online ; 
TRUNCATE report_event ;

答案 1 :(得分:8)

它不是重复的,而是必须尝试来复制它。

您是如何导出数据库的?我会检查转储的SQL文件是否在顶部有“ SET FOREIGN_KEY_CHECKS = 0; ”或类似的行。

如果没有,我会删除数据库并将此行添加到文件的顶部:

SET FOREIGN_KEY_CHECKS = 0;

......这一行到底:

SET FOREIGN_KEY_CHECKS = 1;

...然后再试一次。

答案 2 :(得分:6)

我遇到了同样的错误。

对我来说,事实证明,出口花费了很长时间,网站保持“现场”状态,导致出口结束与开头不同步。

具体来说,'log_visitor_info'表比其他一些相关的访问者日志表有大约100个记录,因此数据库正在尝试从此处已存在的另一个表创建记录ID。

我刚从这个特定的表中删除了最后100条左右的记录,但事情再次发生,没有错误。 或者,看起来你可以在f5键上进行混搭,直到你超过已经存在的ID并且Magento将再次开始工作。

我怀疑在导出之前将商店置于维护模式可能有助于解决此特定错误。

答案 3 :(得分:0)

在我的情况下,问题是在文本编辑器中没有BOM编码的UTF-8。我已经使用BOM更改为UTF-8,一切正常。

答案 4 :(得分:0)

如果显示表'cataloginventory_stock_item' having 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID' index,的错误

然后请确保您从脚本中传递不同的产品SKU。

答案 5 :(得分:0)

在您的magento数据库中运行此sql查询。

TRUNCATE dataflow_batch_export ;

TRUNCATE dataflow_batch_import ; 

TRUNCATE log_customer ; 

TRUNCATE log_quote ; 

TRUNCATE log_summary ; 

TRUNCATE log_summary_type ; 

TRUNCATE log_url ; 

TRUNCATE log_url_info ; 

TRUNCATE log_visitor ; 

TRUNCATE log_visitor_info ; 

TRUNCATE log_visitor_online ; 

TRUNCATE report_event ;

首先,你必须检查' log_visitor_info'表结构。在此表格中,“visitor_id' field的默认值应为null。如果默认值设置为任何你应该运行以下查询,否则你留下以下查询只需执行上述查询。

ALTER TABLE `log_visitor_info` CHANGE `visitor_id` `visitor_id` BIGINT(20) UNSIGNED NOT NULL COMMENT 'Visitor ID';

答案 6 :(得分:0)

此问题是因为表log_visitor_info包含log_visitor表中不存在的额外访问者行,如@creuzerm的注释所述;

如果运行这些查询,则必须具有相同的结果

SELECT MAX(`visitor_id`) FROM `log_visitor`;

SELECT MAX(`visitor_id`) FROM `log_visitor_info`;

要解决此问题,您需要使用以下查询删除这些多余的无效行

DELETE FROM `log_visitor_info` WHERE `visitor_id` > ( SELECT MAX(`visitor_id`) FROM `log_visitor` );

为了保持一致性,也可以运行

DELETE FROM `log_visitor_online` WHERE `visitor_id` > ( SELECT MAX(`visitor_id`) FROM `log_visitor` );