Как найти все отношения между всеми таблицами mysql?

Как найти все отношения между всеми таблицами MySQL? Если, например, я хочу знать отношение таблиц в базе данных, содержащих около 100 таблиц.

Есть ли вообще знать это?

Ответы

Ответ 1

Лучший способ, программно говоря, собирать данные из таблицы INFORMATION_SCHEMA.KEY_COLUMN_USAGE следующим образом:

SELECT 
  `TABLE_SCHEMA`,                          -- Foreign key schema
  `TABLE_NAME`,                            -- Foreign key table
  `COLUMN_NAME`,                           -- Foreign key column
  `REFERENCED_TABLE_SCHEMA`,               -- Origin key schema
  `REFERENCED_TABLE_NAME`,                 -- Origin key table
  `REFERENCED_COLUMN_NAME`                 -- Origin key column
FROM
  `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`  -- Will fail if user don't have privilege
WHERE
  `TABLE_SCHEMA` = SCHEMA()                -- Detect current schema in USE 
  AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys

Здесь больше информации о колонках, например ORDINAL_POSITION, которая может быть полезна в зависимости от вашей цели.

Дополнительная информация: http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html

Ответ 2

Попробуйте следующее:

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Ответ 3

Try

ВЫБЕРИТЕ
`TABLE_NAME`,
`COLUMN_NAME`,
`REFERENCED_TABLE_NAME`,
`REFERENCED_COLUMN_NAME`
FROM `information_schema`.`KEY_COLUMN_USAGE`
WHERE `CONSTRAINT_SCHEMA` = 'YOUR_DATABASE_NAME' И
`REFERENCED_TABLE_SCHEMA` НЕ НУЛЛ И
`REFERENCED_TABLE_NAME` не является NULL и
`REFERENCED_COLUMN_NAME` НЕ НУЛЛ

не забудьте заменить YOUR_DATABASE_NAME своим именем базы данных!

Ответ 4

Быстрый метод визуализации связей в MySQL - это обратное проектирование базы данных с помощью MySQL Workbench.

Это можно сделать и с помощью обратной инженерии, которая приведет к диаграмме сущностей-отношений, которая будет похожа на следующую (хотя вам, возможно, придется ее самостоятельно организовать после ее создания):

ERD

Ответ 5


SELECT 
    count(1) totalrelationships ,
    c.table_name tablename,
    CONCAT(' ',GROUP_CONCAT(c.column_name ORDER BY ordinal_position SEPARATOR ', ')) columnname,
    CONCAT(' ',GROUP_CONCAT(c.column_type ORDER BY ordinal_position SEPARATOR ', ')) columntype    
FROM
    information_schema.columns c RIGHT JOIN
    (SELECT column_name , column_type FROM information_schema.columns WHERE 
    -- column_key in ('PRI','MUL') AND  -- uncomment this line if you want to see relations only with indexes
    table_schema = DATABASE() AND table_name = 'YourTableName') AS p
    USING (column_name,column_type)
WHERE
    c.table_schema = DATABASE()
    -- AND c.table_name != 'YourTableName'
    GROUP BY tablename
    -- HAVING (locate(' YourColumnName',columnname) > 0) -- uncomment this line to search for specific column 
    ORDER BY totalrelationships desc, columnname
;

Ответ 6

вы можете использовать:

SHOW CREATE TABLE table_name;

Ответ 7

Один из вариантов: вы можете сделать обратное проектирование, чтобы понять его схематически.

Когда вы устанавливаете MySQL, вы получите MySQLWorkbench. Вам нужно открыть его и выбрать базу данных, которую вы хотите перепроектировать. Нажмите опцию "Обратный инженер" где-нибудь, что вы найдете в меню "Инструменты" или "База данных". Он попросит вас выбрать таблицы. Либо вы выбираете таблицы, которые хотите понять, либо выбираете всю БД. Он будет генерировать диаграмму с отношениями.

Ответ 8

1) Зайдите в свою базу данных:
use DATABASE;

2) Показать все таблицы:
show tables;

3) Посмотрите на каждый столбец таблицы, чтобы собрать, что он делает и что он сделал:
describe TABLENAME;

4) Опишите хорошо, поскольку вы можете точно определить, что делают ваши столбцы таблицы, но если вы хотите еще более внимательно рассмотреть сами данные: select * from TABLENAME
Если у вас большие таблицы, то каждая строка обычно имеет id, и в этом случае мне нравится делать это, чтобы просто получить несколько строк данных и не перегружать терминал:
select * from TABLENAME where id<5 - Вы можете поместить любое условие, которое вам нравится.

Этот метод дает вам больше информации, чем просто делать select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;, а также предоставляет вам дополнительную информацию об размеру укуса каждый раз.

ИЗМЕНИТЬ

Как и предполагалось, вышеприведенный WHERE id < 5 был плохим выбором в качестве условного заполнителя. Не рекомендуется ограничивать идентификационный номер, тем более, что идентификатор обычно не заслуживает доверия, чтобы быть последовательным. Вместо этого добавьте LIMIT 5 в конце запроса.