답변:
테이블의 경우 :
SELECT
TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = '<database>' AND
REFERENCED_TABLE_NAME = '<table>';
열의 경우 :
SELECT
TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = '<database>' AND
REFERENCED_TABLE_NAME = '<table>' AND
REFERENCED_COLUMN_NAME = '<column>';
기본적으로 where 절에서 REFERENCED_TABLE_NAME을 REFERENCED_COLUMN_NAME으로 변경했습니다.
where REFERENCED_TABLE_SCHEMA = 'mydatabase' and REFERENCED_TABLE_NAME = 'mytable'
편집 : 의견에서 지적했듯이 이것은 OP 질문에 대한 정답은 아니지만이 명령을 아는 것이 유용합니다. 이 질문은 내가 찾던 것에 대해 Google에 나타 났으며 다른 사람들이 찾을 수 있도록이 답변을 남길 것이라고 생각했습니다.
SHOW CREATE TABLE `<yourtable>`;
이 답변을 여기에서 찾았습니다 : MySQL : 테이블에 대한 제약 조건 표시 명령
FK의 존재 유무를 확인하는 것이 아니라 FK가 어떻게 작동하는지 확인하고 싶기 때문에이 방법이 필요했습니다.
<yourtable>
, 그 시점에 모든 제약 <yourtable>
.
display foreign keys mysql
구글 의 첫 결과이며 , 그 이유 일 수 있습니다;)
InnoDB와 정의 된 FK를 사용하는 경우 information_schema 데이터베이스를 쿼리 할 수 있습니다.
SELECT * FROM information_schema.TABLE_CONSTRAINTS
WHERE information_schema.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND information_schema.TABLE_CONSTRAINTS.TABLE_SCHEMA = 'myschema'
AND information_schema.TABLE_CONSTRAINTS.TABLE_NAME = 'mytable';
유용한 정보를 추가하기 위해 이전 답변에 게시.
비슷한 문제가 있었지만 REFERENCED 테이블 및 열 이름과 함께 CONSTRAINT_TYPE을보고 싶었습니다. 그래서,
테이블의 모든 FK를 보려면
USE '<yourschema>';
SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
FROM information_schema.TABLE_CONSTRAINTS i
LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME
WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND i.TABLE_SCHEMA = DATABASE()
AND i.TABLE_NAME = '<yourtable>';
스키마의 모든 테이블과 FK를 보려면
USE '<yourschema>';
SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
FROM information_schema.TABLE_CONSTRAINTS i
LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME
WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY'
AND i.TABLE_SCHEMA = DATABASE();
데이터베이스의 모든 FK를 보려면
SELECT i.TABLE_SCHEMA, i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
FROM information_schema.TABLE_CONSTRAINTS i
LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME
WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY';
생각해 내다!
이것은 InnoDB 스토리지 엔진을 사용하고 있습니다. 외래 키를 추가 한 후에 표시 할 수없는 경우 테이블이 MyISAM을 사용하고 있기 때문일 수 있습니다.
확인하다:
SELECT * TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<yourschema>';
수정하려면 다음을 사용하십시오.
ALTER TABLE `<yourtable>` ENGINE=InnoDB;
Node의 답변에 대한 대안으로 InnoDB 및 정의 된 FK를 사용하는 경우 information_schema 데이터베이스를 쿼리 할 수 있습니다.
SELECT CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME
FROM information_schema.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = '<schema>'
AND TABLE_NAME = '<table>'
<table>의 외래 키 또는
SELECT CONSTRAINT_NAME, TABLE_NAME, REFERENCED_TABLE_NAME
FROM information_schema.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = '<schema>'
AND REFERENCED_TABLE_NAME = '<table>'
<table>에 대한 외래 키
원하는 경우 UPDATE_RULE 및 DELETE_RULE을 얻을 수도 있습니다.
이 솔루션은 모든 관계뿐만 아니라 제약 조건 이름도 표시 할 수 있습니다.
select
concat(table_name, '.', column_name) as 'foreign key',
concat(referenced_table_name, '.', referenced_column_name) as 'references',
constraint_name as 'constraint name'
from
information_schema.key_column_usage
where
referenced_table_name is not null;
특정 데이터베이스에서 테이블을 확인하려면 쿼리 끝에 스키마 이름을 추가하십시오.
select
concat(table_name, '.', column_name) as 'foreign key',
concat(referenced_table_name, '.', referenced_column_name) as 'references',
constraint_name as 'constraint name'
from
information_schema.key_column_usage
where
referenced_table_name is not null
and table_schema = 'database_name';
마찬가지로 특정 열 이름에 대해
그리고 table_name = 'table_name
쿼리가 끝날 때
다음을 사용하여 FK를 나열하는 빠른 방법 (외국 키 참조)
KEY_COLUMN_USAGE view:
SELECT CONCAT( table_name, '.',
column_name, ' -> ',
referenced_table_name, '.',
referenced_column_name ) AS list_of_fks
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = (your schema name here)
AND REFERENCED_TABLE_NAME is not null
ORDER BY TABLE_NAME, COLUMN_NAME;
이 쿼리는 제약 조건과 모든 참조 및 참조 테이블이 동일한 스키마에 있다고 가정합니다.
자신의 의견을 추가하십시오.
출처 : 공식 mysql 매뉴얼.
외래 키 열의 이름을 얻으려면 다음을 수행하십시오.
SELECT i.TABLE_SCHEMA, i.TABLE_NAME,
i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME,
k.COLUMN_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
FROM information_schema.TABLE_CONSTRAINTS i
LEFT JOIN information_schema.KEY_COLUMN_USAGE k
ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME
WHERE i.TABLE_SCHEMA = '<TABLE_NAME>' AND i.CONSTRAINT_TYPE = 'FOREIGN KEY'
ORDER BY i.TABLE_NAME;