识别 MySQL "Integrity constraint violation" (1022) 条消息中的错误外键

Identify faulty foreign-key in MySQL "Integrity constraint violation" (1022) messages

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

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

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

此问题因缺少外键名称和临时 table 名称而变得模糊不清。有没有办法切换到更详细的模式或其他方式?

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

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[…]

你至少可以找出table 错误发生在运行 "show engine innodb status" 在MySQL 中作为root。它会显示类似:

------------------------
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

(例子来自here)