Я создаю класс, который берет таблицу из базы данных и отображает ее на веб-странице с максимально возможной функциональностью. Одна из вещей, которые я хотел бы поддержать, заключалась бы в том, чтобы класс обнаружил, какие столбцы в таблице имеют ограничение на внешние ключи, чтобы они могли затем перейти к этим таблицам, получить все их значения и использовать их в выбранном -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.
SELECT * FROM information_schema.table_constraints WHERE table_schema = 'dbname' AND table_name='mytable';
Вместо dbname используйте функцию SCHEMA()
чтобы установить имя базы данных в USE
.
Как отметил Дэн Гроссман, команда
SHOW CREATE TABLE `yourtablename`
можно использовать в основном получить дамп SQL инструкции create table.
MySQL предоставляет команду SHOW KEYS. Таким образом, теоретически можно получить FK, если вы знаете более низкий порог мощности и имеете несколько других ключей в таблице.
SHOW KEYS FROM `address` WHERE Non_unique AND CARDINALITY > 10000
Поскольку мощность ключа изменяется каждый раз, когда внутренняя база данных изменяется, это довольно теоретически. См. Изменение мощности, например, с помощью ANALYZE TABLE
.
Полезно придерживаться схемы именования, например foreigntablename_foreignfieldname
. Например, поле user_id
в billing
таблицы. Несколько ORM больших веб-контентов используют эту схему.