MySQL : 프로그래밍 방식으로 외국의 주요 관계를 결정하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/273794

  •  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';
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top