본문

MySQL의 SHOW COLUMNS / DESCRIBE 문법


SHOW [FULL] COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
{DESCRIBE | DESC} tbl_name [col_name | wild]

--
SHOW COLUMNS는 주어진 테이블에 대한 정보를 표시하며, MySQL 5.0.1 버전의 View에서 작동한다. LIKE문을 사용하여, 반환될 열의 이름을 정할 수 있다. WHERE문을 통하여, 19.19, “Extensions to SHOW Statements”항에서 다루었듯, 좀 더 일반적인 조건을 사용하여 원하는 열을 선택할 수 있다. 
DESCRIBE는 SHOW COLUMNS의 축약형이며 오라클과의 호환성을 위하여 구상되었다. 이는 또한 DESC로 줄여 사용될 수 있다.

* DESCRIBE에서의 col_name은 원하는 컬럼의 이름이거나 %나 _ 와일드카드를 포함하는 문자열이며 공백이나 다른 특수문자가 있을경우를 제외하고 col_name은 쌍따옴표로 묶어줄 필요는 없다. [SHOW COLUMNS의 LIKE 문을 생각하면 된다]

* 만약 데이터타입이 CREATE TABLE에서 사용되었던것과 다르다면, MySQL은 테이블을 만들거나 수정할 때 가끔 데이터타입을 인위적으로 바꾼다는 사실을 명심하라. 어떠한 경우에 이런 현상이 발생하는지에 대해서는 12.1.10.1, “Silent Column Specification Changes”항을 참고하라. 

* tbl_name FROM db_name syntax 대신 db_name.tbl_name을 사용할 수 있다.
mysql> SHOW COLUMNS FROM mytable FROM mydb;
mysql> SHOW COLUMNS FROM mydb.mytable;

* SHOW COLUMNS는 각각의 테이블에 대해 다음과 같은 열들을 제공한다. (F)는 FULL 키워드가 사용될 때 나타난다
Field : 열의 이름을 나타낸다
Type : 열의 자료형을 나타낸다
Collation(F) : nonbinary 문자열에 대한 collation을 나타내거나, 그 이외의 경우에 대해 NULL을 나타낸다.
Null : 만약 NULL 값이 열안에 존재할 수 있다면 YES. 아닌경우 MySQL 5.0.3에서는 NO, 하위버전에서는 ''으로 표기된다
Key : 열이 인덱스로 사용되는지에 대해 나타낸다.


* Key항목이 공백일 경우, 이 열은 인덱스로 사용되지 않거나, 결합된 열에서 보조적으로 인덱스로 사용되거나, 혹은 중복값을 허용하는 인덱스일 경우를 나타낸다.
* Key항목이 PRI일 경우 이 열은 PRIMARY KEY이거나 결합된 열에서 PRIMARY KEY로 사용되는 열이다.
* Key항목이 UNI일 경우 이 열은 NULL을 포함하지 않는, 중복값을 허용하지 않는 첫번째 열임을 알려준다.
* Key항목이 MUL일 경우 이 열에 한하여 주어진 값에 대해 중복을 허용한다는것을 알려준다. 이 열은 중복을 허용하는 인덱스 또는 NULL을 포함하는 중복을 허용하지 않는 인덱스의 첫번째 열이다.

만약 열에 적어도 하나이상의 Key값이 부여된다면, PRI, UNI, MUL의 중요도를 적용하여 가장 높은 중요도를 갖는 값만을 반환한다.

UNIQUE 인덱스는 만약 NULL값이 허용되지 않으며 테이블 상에 PRIMARY KEY가 없을 경우 PRI로 표기될 것이다. UNIQUE인덱스는 여러 열들이 결합되어 UNIQUE 인덱스를 형성할 경우 MUL으로 표기된다. [비록 열들의 조합이 중복을 허용하지 않지만, 각각의 열에서는 특정 값이 여러번 반복될 수 있다]

MySQL 5.0.11 이전에 열이 NULL값을 허용한다면, 단일열으로 구성된 UNIQUE 인덱스가 사용된다 하더라도 Key값은 MUL이 될 수 있었다. 그 이유는 만약 열이 NOT NULL으로 지정되지 않았다면 UNIQUE 인덱스에 있는 복수의 열에서 NULL을 가질 수 있었기 때문이다. MySQL 5.0.11에 이르러 열이 NULL을 허용하는지에 대한 여부에 상관없이 UNI를 출력한다. [Null 필드에서 열이 NULL을 포함할 수 있는지 없는지에 대해 확인할 수 있다]

Default : 열에 배정된 기본 값을 나타낸다.
Extra : 주어진 열에 대한 추가적인 정보를 나타낸다. 만약 열이 AUTO_INCREMENT 속성을 가진다면 Extra 값 또한 auto_increment가 될 것이다. 그 이외에는 공백으로 나타난다.
Privileges(F) : 이 열에 대한 권한을 나타낸다.
Comment(F) : 열에 대한 주석을 나타낸다.

SHOW FIELDS와 SHOW COLUMNS는 동일한 구문이며, 테이블의 리스트를 출력하는데에 (CMD와같은)명령줄에서는 mysqlshow db_name tbl_name을 사용할 수도 있다 SHOW CREATE TABLE, SHOW TABLE STATUS과 SHOW INDEX구문도 역시 테이블에 대한 정보를 출력한다. 12.4.5, “SHOW Syntax”항을 살펴보라, INFORMATION_SCHEMA.COLUMNS도 살펴보는것도 좋을 것이다.


====
Column이 열이었는지 행이었는지 헷갈려서 중간에 행대신 열으로 썼었다. 물론 행/열에 대해 모른다는건 아니고 평소에는 Column/Row이렇게만 사용하지 한글로는 사용하지 않으니 그런거다(라는 변명?) 아무튼 나름 한글로 풀어쓰고 나름의 주석을 단다고는 했는데 원문으로 그냥보면 매우 자연스러운 문장이 너무 어색해지는것 같아(특히 인덱스 부분) 글을 올리지 말까? 하고 생각하기도 했다. 하지만 만에하나 이것이 누군가에게는 사용될 수도 있다라고 생각해서 올려본다. 이 글은 MySQL의 SHOW COLUMNS 을 위주로 한 번역임을 밝힌다

=> 댓글에 지적되었듯, 행으로 작성한 것을 열으로 바꾸었습니다..

댓글

Holic Spirit :: Tistory Edition

design by tokiidesu. powerd by kakao.