0

有没有办法为 MySQL 中的外键违规获取更好的调试信息?

我正在使用 Phinx 进行数据库迁移,并且我正在处理连续的多个约束和如下异常消息:

Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-1b8c_4534' in […]

由于缺少外键名和临时表名,这个问题变得模糊不清。有没有办法切换到更详细的模式或其他东西?

扩展堆栈跟踪也会有所帮助,因为现在它看起来像这样,带有截断的查询:

Stack trace:
#0 /home/user/work/project/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php(167): PDO->exec('ALTER TABLE `us...')
#1 /home/user/w[…]
4

1 回答 1

1

您至少可以通过在 MySQL 中以 root 身份运行“show engine innodb status”来找出错误发生在哪个表中。它将显示如下内容:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2018-02-13 11:12:26 0x70000b776000 Error in foreign key constraint of table table/#sql-7fa_247a:
 foreign key (`my_foreing_key`) references `table` (`id`)
   on delete cascade:
Cannot resolve table name close to:
 (`id`)
   on delete cascade

(示例来自这里

于 2019-07-25T20:03:51.450 回答