Post

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.