MySQL 테이블 명세 출력하기
테이블 명세서를 작성하는 일은 매우 번거롭다. 이를 자동화할 수 있는 SQL문을 구성한다면 편리하게 사용 가능하다. MySQL과 MariaDB에서 모두 사용가능한 SQL문이다.
MySQL 테이블 명세 출력하기
#01. 기본 버전
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET @DB_NAME := '데이터베이스이름';
SET @TABLE_NAME := '확인하고자 하는 테이블 이름';
SELECT
ORDINAL_POSITION AS '번호',
COLUMN_NAME AS '필드명',
COLUMN_TYPE AS '속성',
IS_NULLABLE AS 'NULL',
COLUMN_KEY AS 'KEY',
EXTRA AS '자동증가',
COLUMN_DEFAULT '기본값',
COLUMN_COMMENT AS '설명'
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = @DB_NAME AND TABLE_NAME = @TABLE_NAME
ORDER BY
TABLE_NAME, ORDINAL_POSITION;
#02. 프로시저 버전
1. 프로시저 생성하기
use 데이터베이스이름;
명령 수행 후 다음의 프로시저를 생성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
CREATE PROCEDURE `SP_TABLE_INFO`()
BEGIN
-- 종료 조건 변수
DECLARE _done INT DEFAULT FALSE;
-- 현재 스키마 이름 저장
DECLARE _current_schema VARCHAR(100);
-- 테이블 이름을 담을 변수
DECLARE _table_name VARCHAR(100);
-- 커서 선언 (변수 선언 다음에 위치해야 함)
DECLARE MY_CURSOR CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = DATABASE();
-- 핸들러는 커서 선언 다음에 위치해야 함
DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;
-- 현재 스키마 이름 저장
SET _current_schema = DATABASE();
-- 커서 열기
OPEN MY_CURSOR;
-- 커서 반복 처리
read_loop: REPEAT
FETCH MY_CURSOR INTO _table_name;
IF NOT _done THEN
-- 각 테이블의 컬럼 정보 출력
SELECT
_table_name AS '테이블',
ORDINAL_POSITION AS '번호',
COLUMN_NAME AS '필드명',
COLUMN_TYPE AS '속성',
IS_NULLABLE AS 'NULL',
COLUMN_KEY AS 'KEY',
EXTRA AS '자동증가',
COLUMN_DEFAULT AS '기본값',
COLUMN_COMMENT AS '설명'
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_SCHEMA = _current_schema
AND TABLE_NAME = _table_name
ORDER BY
ORDINAL_POSITION;
END IF;
UNTIL _done END REPEAT read_loop;
-- 커서 닫기
CLOSE MY_CURSOR;
END ;;
2. 프로시저 실행하기
다음의 명령을 통해 데이터베이스 내의 모든 테이블에 대한 테이블 명세를 일괄 출력할 수 있다. (대소문자를 가리지 않는다.)
1
CALL SP_TABLE_INFO();
This post is licensed under CC BY 4.0 by the author.