Mysql 重复输入';1';对于键';初级';在Magento中进行数据迁移

Mysql 重复输入';1';对于键';初级';在Magento中进行数据迁移,mysql,magento,data-migration,Mysql,Magento,Data Migration,我正在思考为什么以下代码向我抛出错误:我得到的错误是: [ERROR in query 5] Duplicate entry '1' for key 'PRIMARY' 这是我正在执行的查询: DROP TABLE IF EXISTS `core_store`; CREATE TABLE `core_store` ( `store_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Store Id', `code` v

我正在思考为什么以下代码向我抛出错误:我得到的错误是:

[ERROR in query 5] Duplicate entry '1' for key 'PRIMARY'
这是我正在执行的查询:

DROP TABLE IF EXISTS `core_store`;

CREATE TABLE `core_store` (
  `store_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Store Id',
  `code` varchar(32) DEFAULT NULL COMMENT 'Code',
  `website_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Website Id',
  `group_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Group Id',
  `name` varchar(255) NOT NULL COMMENT 'Store Name',
  `sort_order` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Store Sort Order',
  `is_active` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Store Activity',
  PRIMARY KEY (`store_id`),
  UNIQUE KEY `UNQ_CORE_STORE_CODE` (`code`),
  KEY `IDX_CORE_STORE_WEBSITE_ID` (`website_id`),
  KEY `IDX_CORE_STORE_IS_ACTIVE_SORT_ORDER` (`is_active`,`sort_order`),
  KEY `IDX_CORE_STORE_GROUP_ID` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores';

LOCK TABLES `core_store` WRITE;
/*!40000 ALTER TABLE `core_store` DISABLE KEYS */;

INSERT INTO `core_store` (`store_id`, `code`, `website_id`, `group_id`, `name`, `sort_order`, `is_active`)
VALUES
    (0,'admin',0,0,'Admin',0,1),
    (1,'store',1,1,'Store',0,1);

/*!40000 ALTER TABLE `core_store` ENABLE KEYS */;
UNLOCK TABLES;
删除除主密钥外的所有密钥时,也会出现此错误:

DROP TABLE IF EXISTS `core_store`;

CREATE TABLE `core_store` (
  `store_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Store Id',
  `code` varchar(32) DEFAULT NULL COMMENT 'Code',
  `website_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Website Id',
  `group_id` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Group Id',
  `name` varchar(255) NOT NULL COMMENT 'Store Name',
  `sort_order` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Store Sort Order',
  `is_active` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT 'Store Activity',
  PRIMARY KEY (`store_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Stores';

LOCK TABLES `core_store` WRITE;
/*!40000 ALTER TABLE `core_store` DISABLE KEYS */;

INSERT INTO `core_store` (`store_id`, `code`, `website_id`, `group_id`, `name`, `sort_order`, `is_active`)
VALUES
    (0,'admin',0,0,'Admin',0,1),
    (1,'store',1,1,'Store',0,1);

/*!40000 ALTER TABLE `core_store` ENABLE KEYS */;
UNLOCK TABLES;

有人知道这里出了什么问题吗?ID为“0”是否可能与此有关?当我对多行重复查询时,如果没有ID=0-entry,它就会工作。这是怎么回事?

由于外键约束和自动递增id,上述查询返回错误。 对于第一次插入,您提供了store_id=0,但作为一个自动增量id,它对于第一次插入的值为1,所以对于第二次插入查询,它的抛出错误为1-1

请运行附加更新查询以更正存储id。 我已经将store_id更改为1和2,而不是0,1 for 2 insert语句,然后我将它们升级为正确的值

运行整个sql语句,从设置外键开始更新查询,而不仅仅是更新查询

我在这里发布之前测试过它

设置外键检查=0;
如果存在“核心存储”,则删除表;
创建表“核心存储”(
`store_id`smallint(5)无符号非空自动增量注释'store id',
`代码'varchar(32)默认空注释'code',
`网站id`smallint(5)未签名非空默认值'0'注释'website id',
`组id`smallint(5)未签名非空默认值'0'注释'group id',
`名称'varchar(255)非空注释'Store name',
`排序顺序'smallint(5)无符号非空默认值'0'注释'Store sort order',
`_是否处于活动状态'smallint(5)未签名非空默认值'0'注释'Store Activity',
主键(`store_id`),
唯一键'UNQ\u CORE\u STORE\u CODE'('CODE'),
键“IDX核心商店网站ID”(“网站ID”),
键'IDX\u CORE\u STORE\u IS\u ACTIVE\u SORT\u ORDER'('IS\u ACTIVE','SORT\u ORDER'),
键“IDX\U核心存储组ID”(“组ID”)
)ENGINE=InnoDB默认字符集=utf8 COMMENT='Stores';
锁表'core_store'写入;
/*!40000 ALTER TABLE`core_store`禁用密钥*/;
插入到'core\u store'('store\u id','code','website\u id','group\u id','name','sort\u order','is\u active`)
价值观
(1,'admin',0,0,'admin',0,1),
(2,'store',1,1,'store',0,1);
更新'core\u store'设置'store\u id`='0',其中'store\u id`='1'比较utf8\u bin限制1;
更新'core\u store'设置'store\u id`='1',其中'store\u id`='2'比较utf8\u bin限制1;
/*!40000 ALTER表'core_store'启用键*/;
解锁表格
基本解决方案是:

大宗报价 将[GLOBAL | SESSION]sql_mode='NO_AUTO_VALUE'设置为0'

请参阅我的评论,以了解我在中间脚本中解决的另一个问题。

这个答案帮助了我: