Intereting Posts

Как получить внешние ключи таблицы в mysql

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

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

Благодаря,

Lemiant

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

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

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

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

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

    Многое можно извлечь из information_schema 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 больших веб-контентов используют эту схему.