MySQL : 프로그래밍 방식으로 외국의 주요 관계를 결정하는 방법은 무엇입니까?
-
07-07-2019 - |
문제
비슷하다 이 질문 하지만 MySQL ....
MySQL (InnoDB를 가정)에서 외국의 주요 참조를 프로그래밍 방식으로 결정하려면 어떻게해야합니까? 나는 거의 다음과 같이 얻을 수 있습니다.
SHOW TABLE STATUS WHERE Name = 'MyTableName';
... 그러나 아아,이 정보 중 일부를 포함하는 것처럼 보이는 주석 열은 잘려서 의존 할 수 없습니다. 다른 방법이 있어야합니다 ...
나는 C API 호출, SQL 문, 무엇이든 기뻐할 것입니다. 일관되게 작동하는 것이 필요합니다.
참고 : 나는 또한 "show create table mytablename"문의 결과를 구문 분석하는 것을 고려했지만 더 간단한 것이 있기를 정말로 바라고 있습니다.
해결책
이 정보를 얻기 위해 쿼리 할 수있는 두 개의 테이블이 있습니다. INFORMATION_SCHEMA.TABLE_CONSTRAINTS
그리고 INFORMATION_SCHEMA.KEY_COLUMN_USAGE
.
다음은 위에서 링크 된 후자의 댓글의 쿼리가 있습니다.이 페이지는 원하는 정보를 얻는 방법을 보여줍니다.
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 = 'test'
AND referenced_table_name IS NOT NULL
ORDER BY table_name, column_name;
'대신'스키마 이름을 사용하십시오.test
' 위에.
다른 팁
여기에서 @bill 솔루션보다 약간 개선됩니다.
SELECT CONSTRAINT_SCHEMA AS db,
CONCAT (
TABLE_NAME,
'.',
COLUMN_NAME,
' -> ',
REFERENCED_TABLE_NAME,
'.',
REFERENCED_COLUMN_NAME
) AS relationship
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'your_table_name'
ORDER BY CONSTRAINT_SCHEMA,
TABLE_NAME,
COLUMN_NAME;
이 경우 나는 "your_table_name"필드와의 관계를 통해 필터링하고 관계가 오는 데이터베이스에서 어떤 데이터베이스가 나오는지 확인했습니다.
노력하다 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
SELECT TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'table_name'
AND TABLE_SCHEMA = 'table_schema';
제휴하지 않습니다 StackOverflow