programing

모든 mysql 테이블 간의 모든 관계를 찾는 방법은 무엇입니까?

sourcejob 2023. 8. 27. 09:07
반응형

모든 mysql 테이블 간의 모든 관계를 찾는 방법은 무엇입니까?

모든 MySQL 테이블 간의 모든 관계를 찾는 방법은 무엇입니까?예를 들어 약 100개의 테이블이 있는 데이터베이스의 테이블 관계를 알고 싶습니다.

이것을 알 수 있는 방법이 있습니까?

더 나은 방법은 프로그래밍 방식으로 말하자면 INFORMATION_SCHEMA에서 데이터를 수집하는 것입니다.KEY_COLUMN_USAGE 테이블은 다음과 같습니다.

SELECT 
  `TABLE_SCHEMA`,                          -- Foreign key schema
  `TABLE_NAME`,                            -- Foreign key table
  `COLUMN_NAME`,                           -- Foreign key column
  `REFERENCED_TABLE_SCHEMA`,               -- Origin key schema
  `REFERENCED_TABLE_NAME`,                 -- Origin key table
  `REFERENCED_COLUMN_NAME`                 -- Origin key column
FROM
  `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`  -- Will fail if user don't have privilege
WHERE
  `TABLE_SCHEMA` = SCHEMA()                -- Detect current schema in USE 
  AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys

ORDINAL_POSITION과 같은 열 정보는 용도에 따라 유용할 수 있습니다.

추가 정보: http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html

사용해 보십시오.

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

해라

선택한다.
"TABLE_NAME",
'Column_NAME',
'참조됨_TABLE_NAME',
'참조됨_열_이름'
출처: "information_schema".'KEY_COLUM_USAGE'
여기서 '제약 조건_SCHEMA' = 'YOUR_DATABASE_NAME' 및
'참조됨_TABLE_SCHEMA'는 null이 아니며
'참조됨_TABLE_NAME'은(는) null이 아니며
'참조됨_COLUMN_NAME'이(가) null이 아닙니다.

데이터베이스 이름으로 YOR_DATABASE_NAME을 바꾸는 것을 잊지 마십시오!

MySQL에서 관계를 시각화하는 빠른 방법은 MySQL Workbench를 사용하여 데이터베이스를 역엔지니어링하는 것입니다.

이는 역 엔지니어링을 사용하여 수행할 수도 있으며, 이는 다음과 매우 유사한 도면요소-관계 다이어그램을 생성할 수 있습니다(단, 생성 후 직접 구성해야 할 수도 있음).

ERD


SELECT 
    count(1) totalrelationships ,
    c.table_name tablename,
    CONCAT(' ',GROUP_CONCAT(c.column_name ORDER BY ordinal_position SEPARATOR ', ')) columnname,
    CONCAT(' ',GROUP_CONCAT(c.column_type ORDER BY ordinal_position SEPARATOR ', ')) columntype    
FROM
    information_schema.columns c RIGHT JOIN
    (SELECT column_name , column_type FROM information_schema.columns WHERE 
    -- column_key in ('PRI','MUL') AND  -- uncomment this line if you want to see relations only with indexes
    table_schema = DATABASE() AND table_name = 'YourTableName') AS p
    USING (column_name,column_type)
WHERE
    c.table_schema = DATABASE()
    -- AND c.table_name != 'YourTableName'
    GROUP BY tablename
    -- HAVING (locate(' YourColumnName',columnname) > 0) -- uncomment this line to search for specific column 
    ORDER BY totalrelationships desc, columnname
;

데이터베이스로 이동합니다.
use DATABASE;

모든 테이블 표시:
show tables;

표의 각 열을 보고 표의 기능과 구성 요소를 수집합니다.
describe TABLENAME;

표 열이 수행하는 작업을 정확하게 파악할 수 있으므로 설명하는 것이 좋지만 데이터 자체를 더 자세히 살펴보려면 다음과 같이 하십시오.select * from TABLENAME
큰 테이블이 있는 경우 각 행에는 일반적으로id이 경우 단말기에 과부하가 걸리지 않고 몇 줄의 데이터만 얻을 수 있습니다.
select * from TABLENAME where id<5여기에 원하는 조건을 넣을 수 있습니다.

이 방법은 단순히 하는 것보다 더 많은 정보를 제공합니다.select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;또한 매번 한 입 크기의 정보를 더 많이 제공합니다.

편집

위의 의견이 제시한 바와 같이,WHERE id < 5조건부 자리 표시자로서 잘못된 선택이었습니다.ID 번호로 제한하는 것은 좋은 생각이 아닙니다. 특히 id는 일반적으로 순차적일 수 없기 때문입니다.LIMIT 5대신 쿼리 끝에 있습니다.

xudre의 응답에 따라 다음을 실행하여 스키마의 모든 관계를 확인할 수 있습니다.

SELECT 
  `TABLE_SCHEMA`,                          -- Foreign key schema
  `TABLE_NAME`,                            -- Foreign key table
  `COLUMN_NAME`,                           -- Foreign key column
  `REFERENCED_TABLE_SCHEMA`,               -- Origin key schema
  `REFERENCED_TABLE_NAME`,                 -- Origin key table
  `REFERENCED_COLUMN_NAME`                 -- Origin key column
FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`
WHERE `TABLE_SCHEMA` = 'YourSchema'
AND   `REFERENCED_TABLE_NAME` IS NOT NULL  -- Only tables with foreign keys

대부분의 경우 제가 원하는 것은 특정 테이블을 가리키는 모든 FK를 아는 것입니다.이 경우 실행할 수를 실행합니다.

SELECT 
  `TABLE_SCHEMA`,                          -- Foreign key schema
  `TABLE_NAME`,                            -- Foreign key table
  `COLUMN_NAME`                            -- Foreign key column
FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`  
WHERE `TABLE_SCHEMA` = 'YourSchema'
AND   `REFERENCED_TABLE_NAME` = 'YourTableName'

한 가지 방법은 역공학을 통해 다이어그램으로 이해할 수 있다는 것입니다.

MySQL을 설치하면 MySQL Workbench가 나타납니다.데이터베이스를 열고 역설계할 데이터베이스를 선택해야 합니다.도구 또는 데이터베이스 메뉴 아래에 있는 역방향 엔지니어 옵션을 클릭합니다.테이블을 선택하라는 메시지가 표시됩니다.이해할 테이블을 선택하거나 전체 DB를 선택합니다.관계가 있는 다이어그램을 생성합니다.

사용할 수 있는 항목:

SHOW CREATE TABLE table_name;

언급URL : https://stackoverflow.com/questions/20855065/how-to-find-all-the-relations-between-all-mysql-tables

반응형