내 SQL 외부 참조 특정 테이블 열에 대한 테이블 목록 가져오기

9987 단어 MySQL

개요


평소의 빈도는 많지 않을 수 있지만 데이터베이스를 처리할 때 외부 참조xxx를 열거하고 싶은 표가 나타날 때가 있다.(없는 사람은 상대할 수 없다)
이럴 때는 아래의 명령으로 조사할 수 있다.
USE information_schema;

SELECT
  TABLE_NAME, --- 参照している側のテーブル名が表示される
  COLUMN_NAME --- 参照している側のカラム名が表示される
FROM
  KEY_COLUMN_USAGE
WHERE
  CONSTRAINT_SCHEMA = 'DB名'
  AND REFERENCED_TABLE_NAME = '参照されている側のテーブル名'
  AND REFERENCED_COLUMN_NAME = '参照されている側のカラム名'
;

견본


우리 실제로 한번 해 봅시다.
예를 들어 이런 DB가 있다.데이터베이스 이름은 id 입니다.test표와diaries표에서 avatars까지.참조users만 파악하면 자세한 내용은 건너뛸 수 있습니다.

ER 그림



CREATE 문


일단 올려.
CREATE TABLE users (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(50),
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE diaries (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `user_id` int(10) unsigned NOT NULL,
  `title` VARCHAR(255),
  `body` TEXT,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT `diaries_fk1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE avatars (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `user_id` int(10) unsigned NOT NULL,
  `image_path` VARCHAR(255),
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT `avatars_fk1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
);

명령 실행 결과


여기에서 id.외부 참조users의 표를 확인하고 싶을 때 이런 느낌으로 사용합니다.
mysql> USE information_schema;
Database changed

mysql> SELECT
    ->   TABLE_NAME,
    ->   COLUMN_NAME
    -> FROM
    ->   KEY_COLUMN_USAGE
    -> WHERE
    ->   CONSTRAINT_SCHEMA = 'test'
    ->   AND REFERENCED_TABLE_NAME = 'users'
    ->   AND REFERENCED_COLUMN_NAME = 'id'
    -> ;
+------------+-------------+
| TABLE_NAME | COLUMN_NAME |
+------------+-------------+
| avatars    | user_id     |
| diaries    | user_id     |
+------------+-------------+
2 rows in set (0.46 sec)
id . users에서 기술한 표와 열은 명령의 집행 결과에 의해 알 수 있다.
편하니까 모르면 해보세요

환경


ySQL의 버전은 5.6.31에서 확인됩니다.

참고 자료


INFORMATION_SCHEMA KEY_COLUMN_USAGE

경품


예를 들어, 이렇게 합니다id.외부 참조users, 되지 않은 테이블을 나열합니다.
SELECT TABLE_NAME, REFERENCED_TABLE_NAME, DELETE_RULE FROM referential_constraints
WHERE TABLE_NAME IN (
  SELECT
    TABLE_NAME
  FROM
    key_column_usage
  WHERE
    CONSTRAINT_SCHEMA='test'
    AND REFERENCED_TABLE_NAME='users'
    AND REFERENCED_COLUMN_NAME='id'
)
AND CONSTRAINT_SCHEMA = 'test'
AND REFERENCED_TABLE_NAME = 'users'
AND DELETE_RULE != 'CASCADE'
만약 id의 물건이 큰 인기를 끌지 못한다면, 예를 들면.앞에 있는 아바타의 CREATE TABLE 표기를 보면 알겠지만 ON DELETE를 설정하지 않았습니다.그래서 RESTRICT임을 알 수 있다.
+------------+-----------------------+-------------+
| TABLE_NAME | REFERENCED_TABLE_NAME | DELETE_RULE |
+------------+-----------------------+-------------+
| avatars    | users                 | RESTRICT    |
+------------+-----------------------+-------------+
1 row in set (0.03 sec)
REFERENTIAL_CONSTRAINTS 테이블

좋은 웹페이지 즐겨찾기