【问题标题】:SQLSTATE[HY000]: General error: 1025 Error on rename error when dropping foreign key in Doctrine MigrationSQLSTATE [HY000]:一般错误:1025 Error on rename error when drop foreign key in Doctrine Migration
【发布时间】:2015-12-09 15:50:00
【问题描述】:

当我在 Doctrine 迁移中运行以下查询时,我看到以下错误:

ALTER TABLE crmpicco_course_version DROP FOREIGN KEY FK_C060B146DE13F470

Migration 20151209153121 failed during Execution. 
Error An exception occurred while executing 
'ALTER TABLE crmpicco_course_version DROP FOREIGN KEY FK_C060B146DE13F470':

SQLSTATE[HY000]: General error: 
1025 Error on rename of './crmpicco_dev/crmpicco_course_version' 
to './crmpicco_dev/#sql2-77c-b0a' (errno: 152)

这是我要更改的表格:

CREATE TABLE `crmpicco_course_version` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `course_id` int(11) NOT NULL,
  `updated_by_id` int(11) DEFAULT NULL,
  `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `start_date` datetime DEFAULT NULL,
  `end_date` datetime DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_C060B146896DBBDE` (`updated_by_id`),
  KEY `IDX_C060B146DE13F470` (`course_id`),
  CONSTRAINT `FK_C060B146896DBBDE` FOREIGN KEY (`updated_by_id`) REFERENCES `crmpicco_user` (`id`),
  CONSTRAINT `FK_C060B146DE13F470` FOREIGN KEY (`course_id`) REFERENCES `crmpicco_course` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

是什么阻止我成功删除这个外键?

当我运行 SHOW ENGINE INNODB STATUS 时,我得到以下信息:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
151209 16:25:42 Error IN dropping of a FOREIGN KEY CONSTRAINT of TABLE "crmpicco_dev"."crmpicco_course_version",
IN SQL command
ALTER TABLE crmpicco_course_version DROP FOREIGN KEY FK_C060B146DE13F470
Cannot find a CONSTRAINT WITH the given id "FK_C060B146DE13F470".

【问题讨论】:

  • 运行查询后SHOW ENGINE INNODB STATUS 会显示什么?
  • @tftd 我已经用输出更新了问题。 CONSTRAINTFOREIGN KEY 之前被删除,但是这是我对 Doctrine 迁移如何工作的理解。 stof 在此确认了这一点github.com/doctrine/migrations/issues/83#issuecomment-7261301
  • 有趣...我感觉这可能是一个错误。看看这个sqlfiddle,它证明了 sql 代码可以正常工作。您是否尝试过更新教义依赖或mysql?在搜索errorno:152 时,我注意到一些关于mysql 官方形式的主题。这里也有一些关于 SO 的内容。
  • @tftd 是的,我对此进行了广泛的了解。 MySQL 网站 (dev.mysql.com/doc/refman/5.7/en/innodb-error-codes.html) 上的建议是 To avoid getting this error while trying to drop a foreign key, use the constraint name rather than the column name of the foreign key.(我正在这样做)。

标签: php mysql symfony doctrine-orm doctrine-migrations


【解决方案1】:

在无休止地删除和重新创建我的本地数据库后,我发现这是由于 Doctrine 多次创建相同的 ALTER 语句而且以错误的顺序造成的。

我必须手动更改语句以确保在新表上创建新的外键约束之前将数据从旧表迁移到新表。如果没有此更改,我将收到上述错误和其他错误。

【讨论】:

  • 干杯!有同样的问题,很高兴知道不是我发疯了
  • 为了防止自动增量 id 出现大的跳跃,我使用alter 在“重复键更新”语句循环后重置 auto_increment 值。我什至没有任何外键在桌子上,也没有引用桌子!
猜你喜欢
  • 2021-01-09
  • 2010-09-14
  • 2012-10-24
  • 2021-08-31
  • 2021-04-24
  • 1970-01-01
  • 2012-10-25
  • 2014-12-31
相关资源
最近更新 更多