Есть ли исполнитель способ получения списка внешних ключей, назначенных таблице MySQL?
Запрос информационной схемы с помощью
SELECT
`column_name`,
`referenced_table_schema` AS foreign_db,
`referenced_table_name` AS foreign_table,
`referenced_column_name` AS foreign_column
FROM
`information_schema`.`KEY_COLUMN_USAGE`
WHERE
`constraint_schema` = SCHEMA()
AND
`table_name` = 'your-table-name-here'
AND
`referenced_column_name` IS NOT NULL
ORDER BY
`column_name`;
работает, но мучительно медленно на версиях MySQL, с которыми я пробовал. Небольшое исследование обнаружило эту ошибку , которая, кажется, указывает на то, что это постоянная проблема без ясного решения. Решения, на которые намекают, требуют переконфигурирования или перекомпиляции mysql с патчем, который не работает для проекта, над которым я работаю.
Я понимаю, что возможно выдать следующее
SHOW CREATE TABLE table_name;
и получите строковое представление инструкции CREATE TABLE, которая будет включать ограничения внешнего ключа. Тем не менее, синтаксический анализ этой строки кажется хрупким, и у меня нет большого набора операторов CREATE TABLE для проверки. (если есть стандартный код разбора для этого, я бы хотел несколько ссылок)
Я также понимаю, что могу перечислить индексы со следующим
SHOW CREATE TABLE table_name;
Список индексов будет включать внешние ключи, но, похоже, нет способа определить, какие из индексов являются внешними ключами, а какие - "обычными" индексами MySQL. Опять же, здесь могут помочь некоторые перекрестные ссылки с информацией таблицы SHOW CREATE, но это возвращает нас к хрупкому разбору строк.
Буду признателен за любую помощь или даже ссылки на другие умные дискуссии по этому вопросу.