테이블을 만들 때 COMMENT를 꼬박꼬박 달아 두면 나중에 그게 꽤 쓸모가 있습니다. 화면 설계서나 테이블 정의서를 만들 때, 관리 화면에서 컬럼명 대신 한글 이름을 보여 줄 때, 인수인계할 때 "이 컬럼 뭐예요?" 질문을 줄일 때 전부 이 코멘트를 그대로 끌어다 쓰면 됩니다. 문제는 코멘트를 어디서 꺼내 오느냐인데, MySQL은 이 정보를 information_schema에 모아 둡니다.

테이블 코멘트는 information_schema.tables의 table_comment에, 컬럼 코멘트는 information_schema.columns의 column_comment에 들어 있습니다. 둘 다 table_schema가 DB(스키마) 이름이라서, 다른 DB의 같은 이름 테이블과 섞이지 않게 이 조건은 항상 걸어 주는 편이 좋습니다.

광고

테이블 코멘트 꺼내기

DB 전체 테이블의 코멘트를 보려는 쿼리입니다.

SELECT
    table_name, table_comment
FROM
    information_schema.tables
WHERE
    table_schema = 'DB 이름' AND table_name = '테이블 이름';

주의할 점이 하나 있습니다. 위 쿼리에는 table_name 조건까지 붙어 있어서 실제로는 테이블 하나만 나옵니다. 아래 "특정 테이블" 쿼리와 내용이 똑같아요. DB 안의 모든 테이블 코멘트를 보려면 table_name 조건을 빼야 합니다.

-- 수정본: DB 전체 테이블 코멘트 (table_name 조건 제거)
SELECT
    table_name, table_comment
FROM
    information_schema.tables
WHERE
    table_schema = 'DB 이름';

특정 테이블 하나의 코멘트만 볼 때는 이렇게 씁니다.

SELECT
    table_name, table_comment
FROM
    information_schema.tables
WHERE
    table_schema = 'DB 이름' AND table_name = '테이블 이름';

컬럼 코멘트 꺼내기

DB 안 모든 테이블의 컬럼 코멘트를 한 번에 뽑는 쿼리입니다. 테이블 정의서를 엑셀로 만들 때 이 결과를 그대로 복사해 붙이면 편합니다.

SELECT
    table_name, column_name, column_comment
FROM
    information_schema.columns
WHERE
    table_schema = 'DB 이름';

테이블 하나로 좁히려면 table_name 조건을 추가합니다.

SELECT
    table_name, column_name, column_comment
FROM
    information_schema.columns
WHERE
    table_schema = 'DB 이름' AND table_name = '테이블 이름';

쓰면서 걸리는 부분

컬럼 순서가 뒤죽박죽으로 나와서 당황할 때가 있습니다. information_schema.columns에는 ordinal_position(테이블 안에서 컬럼의 위치)이 있으니 정의서용으로 뽑을 때는 ORDER BY table_name, ordinal_position을 붙여 두세요. 같은 뷰에 column_type, is_nullable, column_default, column_key 같은 컬럼도 있어서, SELECT 목록에 몇 개만 더 넣으면 정의서에 필요한 항목이 거의 다 채워집니다.

결과가 비어 있다면 대개 권한이나 이름 문제입니다. information_schema는 접속한 계정이 권한을 가진 객체만 보여 주기 때문에, 권한 없는 DB는 조건이 맞아도 행이 안 나옵니다. DB 이름의 대소문자도 서버 설정(lower_case_table_names)에 따라 결과가 달라질 수 있으니 확인해 보세요.

코멘트를 아직 안 달았다면 테이블은 ALTER TABLE 테이블 COMMENT = '설명';으로 넣을 수 있습니다. 컬럼 코멘트는 ALTER TABLE ... MODIFY COLUMN으로 컬럼 정의 전체(타입, NULL 여부, 기본값까지)를 다시 써 줘야 해서, 기존 정의를 빼먹으면 속성이 바뀌어 버립니다. 수정 전에 SHOW CREATE TABLE로 원래 정의를 복사해 두고 거기에 COMMENT만 덧붙이는 식으로 작업하는 게 안전합니다. 간단히 눈으로만 확인할 때는 SHOW FULL COLUMNS FROM 테이블;도 Comment 열을 함께 보여 줍니다.

참고: 확장형 뇌 저장소 - MySQL 테이블, 컬럼 코멘트 조회