복붙노트

[SQL] MySQL은 : 프로그래밍 방식으로 외래 키 관계를 결정하기 위해?

SQL

MySQL은 : 프로그래밍 방식으로 외래 키 관계를 결정하기 위해?

이 질문에 있지만, MySQL 용 비슷한 ....

어떻게 프로그래밍 (이노 가정)의 MySQL에서 외래 키 참조를 확인할 수 있습니까? 나는 거의 그들과 함께 얻을 수 있습니다 :

SHOW TABLE STATUS WHERE Name = 'MyTableName';

...하지만 슬프게도, 나는 그것에 의존하지 수 있도록이 정보 중 일부는 잘립니다 포함 보인다 주석 열입니다. 다른 방법이 있어야합니다 ...

나는 C API 호출, SQL 문, 아무것도 드리겠습니다 - 난 그냥 일관되게 작동하는 무언가가 필요합니다.

참고 : 나는 또한 문을 "표 MyTableName을 만들 SHOW"는 결과를 분석 생각했지만, 정말 간단한 일이있다 바라고 있어요.

해결법

  1. ==============================

    1.INFORMATION_SCHEMA.TABLE_CONSTRAINTS 및 INFORMATION_SCHEMA.KEY_COLUMN_USAGE :이 정보를 얻기 위해 조회 할 수 있습니다 두 개의 테이블이 있습니다.

    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;
    

    스키마 이름 대신 '테스트'이상을 사용하십시오.

  2. ==============================

    2.여기에서 @ 빌 솔루션을 통해 약간의 개선이있다 :

    여기에서 @ 빌 솔루션을 통해 약간의 개선이있다 :

    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"필드와의 관계에 의해 필터링되고 관계가 제공하는 데이터베이스에서보고.

  3. ==============================

    3.시도의 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

    시도의 INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

  4. ==============================

    4.빌 Karwin에 따라, 나는 내가 필요한 모든 정보를 얻기 위해이 솔루션을 사용 대답 on_delete 및 on_update 규칙을 포함 :

    빌 Karwin에 따라, 나는 내가 필요한 모든 정보를 얻기 위해이 솔루션을 사용 대답 on_delete 및 on_update 규칙을 포함 :

    SELECT kcu.referenced_table_schema, kcu.constraint_name, kcu.table_name, kcu.column_name, kcu.referenced_table_name, kcu.referenced_column_name, 
           rc.update_rule, rc.delete_rule 
    FROM INFORMATION_SCHEMA.key_column_usage kcu
    JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc on kcu.constraint_name = rc.constraint_name
    WHERE kcu.referenced_table_schema = 'db_name' 
    AND kcu.referenced_table_name IS NOT NULL 
    ORDER BY kcu.table_name, kcu.column_name
    
  5. ==============================

    5.

    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';
    
  6. from https://stackoverflow.com/questions/273794/mysql-how-to-determine-foreign-key-relationships-programmatically by cc-by-sa and MIT license