내 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 테이블
Reference
이 문제에 관하여(내 SQL 외부 참조 특정 테이블 열에 대한 테이블 목록 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tommy_aka_jps/items/7bc3d6101ac47e8a67ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)