【问题标题】:magento SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '363624' for key 'PRIMARY'magento SQLSTATE [23000]:违反完整性约束:1062 键 'PRIMARY' 的重复条目 '363624'
【发布时间】:2013-04-07 21:34:21
【问题描述】:

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

  1. 复制所有文件
  2. 导出数据库
  3. 使用 mysql 工作台导入数据库
  4. 将 base_url 更改为新域
  5. 将 local.xml 更新为正确的设置

现在我得到了:

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

我已经在数据库中搜索了这个键 363624 ,但它并没有像消息中所说的那样重复

我该如何解决这个问题?

【问题讨论】:

  • 哪个表给你这个错误?

标签: mysql magento


【解决方案1】:

这对我有帮助(清理了一些表格):

输入您的 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 ;

之后需要清除 var/session 目录(如果您的会话存储在文件中)会导致您在清除会话文件之前遇到同样的错误。

【讨论】:

  • 这行得通。认为日志表正在更新中间导出导致不一致。
  • 这个解决方案和 redjam13 的解决方案的组合对我有用
  • 如果您的会话存储在文件中,这之后还需要清除会话目录。
【解决方案2】:

它没有被复制,而是必须有什么东西在试图复制它。

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

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

SET FOREIGN_KEY_CHECKS=0;

...这一行到底部:

SET FOREIGN_KEY_CHECKS=1;

...然后再试一次。

【讨论】:

  • 嗨,我遇到了同样的错误,但我的问题是我无法删除数据库,因为这个问题最近开始出现。我有太多的产品和数据。您如何将此解决方案应用于我的情况?谢谢。
  • 你不认为禁用外键检查是个坏主意吗?它实际上是有原因的。这不可能是一个长期的解决方案。
  • 这个解决方案和 Oscars 解决方案的组合对我有用
【解决方案3】:

我遇到了同样的错误。

对我来说,事实证明,由于网站保持“活动”状态,导出花费了很长时间,以至于导出的结尾与开头不同步。

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

我刚刚从该特定表中删除了最后 100 条左右的记录,并且一切正常,没有出现错误。 或者,您似乎可以混搭 f5 键,直到您增加超过该现有 ID 并且 Magento 将再次开始工作。

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

【讨论】:

  • 这个答案非常有帮助 - 我通过将 log_visitor_info 表的 Id 与错误消息中生成的 Id 进行比较发现它确实有大约 10 条记录不同步。因此,按照您的建议点击刷新。为我修复了 10 次。
【解决方案4】:

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

【讨论】:

  • 考虑到 Magento 推荐的 UTF-8 没有 BOM,这很奇怪。
【解决方案5】:

如果表格出现错误'cataloginventory_stock_item' having 'UNQ_CATALOGINVENTORY_STOCK_ITEM_PRODUCT_ID_STOCK_ID' index,

那么请确保您从脚本中传递了不同的产品 SKU。

【讨论】:

  • 如果您对问题的原因提供更多解释,以及您的解决方案如何解决问题,这可能是一个很好的答案。我不确定这是如何解决问题的,因为它是关于迁移 magento。
【解决方案6】:

在您的 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”字段的默认值应为空。如果默认值设置为任何你应该在下面运行这个查询,否则你把它留在下面的查询只是执行上面的查询。

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

【讨论】:

    【解决方案7】:

    这个问题是因为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` );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-16
      • 2016-05-23
      • 2014-09-16
      • 2013-09-28
      • 2013-04-22
      • 2015-10-28
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多