Как я могу получить внешние ключи таблицы в MySQL - PullRequest
5 голосов
/ 12 ноября 2010

Я создаю класс, который берет таблицу из базы данных и отображает ее на веб-странице с максимально возможной функциональностью.Одной из вещей, которые я хотел бы поддержать, было бы, чтобы класс определял, какие столбцы в таблице имеют ограничение внешнего ключа, чтобы он мог затем перейти к этим таблицам, получить все их значения и использовать их в выборке.-box, который вызывается при редактировании этих полей, чтобы избежать нарушения кем-либо ограничений внешнего ключа,

Основная проблема заключается в обнаружении того, на какие поля накладывается ограничение внешнего ключа и на какие таблицы они указывают.Кто-нибудь знает, как это сделать ???

Спасибо,

Lemiant

Ответы [ 3 ]

11 голосов
/ 12 ноября 2010

Простой способ получить внешние ключи для данной таблицы:

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`;
3 голосов
/ 12 ноября 2010

База данных INFORMATION_SCHEMA содержит подробную информацию о полной схеме всех других баз данных, включая ограничения:

http://dev.mysql.com/doc/refman/5.0/en/information-schema.html

Вы также можете выполнить запрос SHOW CREATE TABLE, чтобы получить SQL для создания таблицы, включая ее ограничения.

0 голосов
/ 09 сентября 2013

Многое можно извлечь из MySQL information_schema, включая внешние ключи, как указано dev-null-dweller.

1

SELECT * FROM information_schema.table_constraints 
         WHERE table_schema = 'dbname' AND table_name='mytable';

Вместо dbname используйте функцию SCHEMA(), чтобы задать имя базы данных в USE.


2

Как указал Дэн Гроссман, команда

SHOW CREATE TABLE `yourtablename`

можно использовать, в основном, для получения дампа SQL оператора create table.


~ 3

MySQL предоставляет команду SHOW KEYS. Таким образом, теоретически вы можете получить FK, если вы знаете более низкий порог количества элементов и у вас мало других ключей в таблице.

SHOW KEYS FROM `address` WHERE Non_unique AND CARDINALITY > 10000

Поскольку количество элементов ключа меняется при каждом изменении внутренней базы данных, это довольно теоретически. Смотрите изменение количества элементов, например, с помощью ANALYZE TABLE.


~ 4

Полезно придерживаться схемы именования, такой как foreigntablename_foreignfieldname. Например, поле user_id в таблице billing. Несколько ORM больших фреймворков веб-контента используют эту схему.

...