2015-07-03 3 views
0

Я создаю словарь данных для конкретной схемы в MySQL. Пока у меня есть имя_таблицы, columm_name, column_type (как указано в инструкции SELECT). Как включить то, что связано с внешними ключами, в том же словаре данных? Я хотел бы поместить информацию о внешнем ключе. в этот формат:Включить внешние ключи в словарь данных MySQL

CONCAT(table_name, '.', column_name, ' -> ', referenced_table_name, '.', referenced_column_name) 

select 
t.table_name, 
c.column_name, 
c.column_type 

from 
information_schema.tables as t 
    inner join 
information_schema.columns as c ON t.table_name = c.table_name 
    and t.table_schema = c.table_schema 
where 
t.table_type in ('base table' , 'view') 
    and t.table_schema like 'mySchema' 
order by t.table_schema , t.table_name , c.ordinal_position; 

ответ

1

Список ограничений таблицы можно найти в table_constraints таблицы. Из этой таблицы вы можете получить все внешние ключи, получая все строки с:

constraint_type='FOREIGN KEY' 

Это даст вам только список внешних ключей, если вам нужно больше деталей (например, какие таблицы и столбца они указывают) имеют посмотрите на таблицу key_column_usage:

mysql> describe key_column_usage; 
+-------------------------------+--------------+------+-----+---------+-------+ 
| Field       | Type   | Null | Key | Default | Extra | 
+-------------------------------+--------------+------+-----+---------+-------+ 
| CONSTRAINT_CATALOG   | varchar(512) | NO |  |   |  | 
| CONSTRAINT_SCHEMA    | varchar(64) | NO |  |   |  | 
| CONSTRAINT_NAME    | varchar(64) | NO |  |   |  | 
| TABLE_CATALOG     | varchar(512) | NO |  |   |  | 
| TABLE_SCHEMA     | varchar(64) | NO |  |   |  | 
| TABLE_NAME     | varchar(64) | NO |  |   |  | 
| COLUMN_NAME     | varchar(64) | NO |  |   |  | 
| ORDINAL_POSITION    | bigint(10) | NO |  | 0  |  | 
| POSITION_IN_UNIQUE_CONSTRAINT | bigint(10) | YES |  | NULL |  | 
| REFERENCED_TABLE_SCHEMA  | varchar(64) | YES |  | NULL |  | 
| REFERENCED_TABLE_NAME   | varchar(64) | YES |  | NULL |  | 
| REFERENCED_COLUMN_NAME  | varchar(64) | YES |  | NULL |  | 
+-------------------------------+--------------+------+-----+---------+-------+ 
12 rows in set (0.00 sec) 
+0

Привет, я был в состоянии сделать это, НО как я могу присоединиться к конкретной информации о столбце_type. к этому? 'Выберите table_name, имя_столбца, constraint_name, referenced_table_name, referenced_column_name из information_schema.KEY_COLUMN_USAGE где table_schema как 'mySchemaName',' – user3477955

+0

Для того, чтобы объединить данные из обеих таблиц вы можете использовать constraint_name, если они уникальны или constraint_name + table_name, если нет. –

+0

Привет, я продолжаю получать сообщение об ошибке, что 'constraint_name' является неизвестным столбцом в списке полей и, альтернативно, в разделе« on ». Любые указатели на то, как правильно присоединиться? – user3477955

Смежные вопросы