Проверка ограничений внешнего ключа MySQL - PullRequest
2 голосов
/ 20 мая 2011

Мне нужно проверить ограничения внешнего ключа на схемах. Мне нужно имя таблицы, имя столбца, ссылочная схема, ссылочная таблица и ссылочный столбец. Поиск Google говорит мне, что я мог бы сделать это с помощью information_schema. У меня есть некоторые сомнения относительно этого подхода.

  1. Надежна ли информационная схема? У меня слишком много больших баз данных, содержащих слишком много таблиц, и любые ошибки будут дорогостоящими
  2. Учитывая, что information_schema является системной базой данных и содержит информацию обо всех базах данных, любой запрос займет значительно больше времени. Правильно?

Есть ли альтернативный метод проверки ограничений внешнего ключа? Использование SHOW CREATE TABLE и сравнение запросов не очень хорошая идея.

Мое приложение будет закодировано в C # (Соединитель: ODBC). Я знаю, что есть коннектор .NET MySQL, который предоставляет коллекцию столбцов внешних ключей для метода getschema (http://dev.mysql.com/doc/refman/5.0/en/connector-net-programming-connecting-connection-string.html#connector-net-programming-getschema). Кто-нибудь знает, использует ли он тоже information_schema?

Я мог бы действительно использовать некоторую помощь здесь.

С уважением,

1 Ответ

1 голос
/ 20 мая 2011

Надежна ли информационная схема?

Если нет, то и ваша база данных. (Совет: это не ).

Учитывая, что information_schema является системной базой данных и содержит информацию обо всех базах данных, любой запрос займет значительно больше времени. Правильно?

Это зависит от того, как вы их запрашиваете. Попробуйте show indexes, чтобы увидеть доступные индексы.

Есть ли альтернативный метод проверки ограничений внешнего ключа? Использование SHOW CREATE TABLE и сравнение запросов не очень хорошая идея.

Теоретически, show create table запрашивает информационную схему немного по-другому.

На практике, и цитирование второй ссылки далее, часть информации, возвращаемой между ними, может быть несовместимой:

create table rolando (num int not null, primary key (num) using hash);

mysql> show create table rolando\G
  (...)
  PRIMARY KEY (`num`) USING HASH

mysql> show indexes from rolando;
(...) | Index_type | (...)
(...) | BTREE      | (...)

Наконец, см .:

Является ли запрос в базу данных MySQL information_schema хорошим способом поиска связанных таблиц?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...