마케터의 SQL 맛보기#4
ALTER
데이터베이스와 테이블의 내용을 수정할 수 있는 ALTER 명령어에 대해서 공부해 보도록 하겠다. 먼저 데이터베이스를 수정하는 문법을 살펴보자.
기본문법
ALTER DATABASE 데이터베이스명 CHARACTER SET=문자집합옵션
ALTER DATABASE 데이터베이스명 COLLATE=콜레이션옵션
ALTER DATABASE 데이터베이스명 CHARACTER SET=문자집합옵션 COLLATE=콜레이션옵션
CHARACTER SET과 COLLATE를 따로 옵션을 줄 수 있고, 마지막 3번째 문법처럼 동시에 두 옵션을 주는 방법도 있다. 본격적으로 데이터베이스를 수정하기 전에 현재 데이터베이스의 CHARACTER SET과 COLLATION 설정을 확인해 보도록 하자.
INPUT
SHOW VARIABLES LIKE 'character_set_database';
OUTPUT
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
먼저 사용하고 있는 sktt1 데이터베이스의 CHARACTER SET을 확인했다. UTF-8 유니코드를 지원하는 utf8로 설정이 되어있다.
INPUT
SHOW VARIABLES LIKE 'collation_database';
OUTPUT
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
sktt1 데이터베이스의 COLLATION 설정값도 확인했다. utf8_general_ci는 대소문자를 구분하지 않는 utf8 형식의 비교 규칙을 의미합니다.
확인한 CHARACTER SET과 COLLATION 설정값에 대해서 간단히 설명을 하자면 CHARACTER SET은 문자를 컴퓨터에 저장할 때 어떠한 코드로 저장할지에 대한 규칙을 의미하고, COLLATION은 데이터베이스에서 검색이나 정렬과 같은 작업을 할 때 기준이 되는 비교 규칙을 의미합니다. 이제 sktt1 데이터베이스의 CHARACTER SET과 COLLATION 설정값을 ALTER 명령어를 사용해서 바꿔보도록 하겠다.
INPUT
ALTER DATABASE sktt1 CHARACTER SET=euckr COLLATE=euckr_korean_ci;
성공적으로 쿼리문이 적용됐다면 Query OK 구문과 함께 설정값이 변경되었을 것이다. 확인해 보도록 하자.
INPUT
SHOW VARIABLES LIKE 'character_set_database';
OUTPUT
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | euckr |
+------------------------+-------+
INPUT
SHOW VARIABLES LIKE 'collation_database';
OUTPUT
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| collation_database | euckr_korean_ci |
+--------------------+-----------------+
sktt1 데이터베이스의 CHARACTER SET과 COLLATION 설정값이 변경된 것을 확인할 수 있다. 여기서 euckr은 한글을 지원하는 설정값을 의미하고, euckr_korean_ci는 대소문자를 구분하지 않는 euckr 형식의 비교 규칙을 의미합니다.
(ci는 case-insensitive를 의미하며, 기존의 COLLATION 설정값인 utf8_general_ci과 새로 설정한 euckr_korean_ci처럼 ci가 붙으면 대소문자를 구분하지 않는 규칙을 의미합니다.)
이제 ALTER 명령어를 활용해서 TABLE을 수정해 보도록 하자. 먼저 TABLE에 필드를 추가해 보도록 하자.
기본문법
ALTER TABLE 테이블명 ADD 필드명 필드타입
ADD 명령어를 추가하여 원하는 필드 타입과 함께 지정한 필드명으로 추가가 가능하다. 이제 직접 추가해 보도록 하자.
INPUT
ALTER TABLE sktplayer ADD bloodtype INT;
sktplayer에 bloodtype이라는 이름의 INT 타입 필드를 새로 추가했다. 마찬가지로 성공적으로 쿼리가 적용되면 Query OK 구문이 뜰 것이다.
INPUT
DESC sktplayer;
OUTPUT
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| position | varchar(10) | YES | | NULL | |
| bloodtype | int(11) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
추가한 bloodtype 필드를 DESC 명령어를 통해 확인했다. 성공적으로 들어간 것을 볼 수 있다.
TABLE의 필드를 삭제하는 것도 가능하다.
기본문법
ALTER TABLE 테이블명 DROP 필드명
DROP 명령어를 추가하여 원하는 필드명을 함께 적용하면 삭제가 가능하다. 이제 직접 필드를 삭제해 보도록 하자.
INPUT
ALTER TABLE sktplayer DROP bloodtype;
추가했던 bloodtype 필드를 삭제했다. 마찬가지로 성공적으로 쿼리가 적용되면 Query OK 구문이 뜰 것이다.
INPUT
DESC sktplayer;
OUTPUT
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| position | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
DESC 명령어를 활용하여 확인했다. 추가되어 있던 bloodtype 필드가 사라진 것을 확인할 수 있다.
마지막으로 필드 타입을 변경해 보도록 하자.
기본문법
ALTER TABLE 테이블명 MODIFY COLUMN 필드명 필드타입
MODIFY COLUMN 문을 추가하여 필드 타입 변경이 가능하다. 필드 타입을 변경 후 원래의 상태로 한 번 더 변경시켜 보도록 하자.
INPUT
ALTER TABLE sktplayer MODIFY COLUMN position INT;
기존의 position 필드의 VARCHAR 타입을 INT 타입으로 변경했다.
INPUT
DESC sktplayer;
OUTPUT
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| position | int(11) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
DESC 명령어로 확인해 보니, position 필드의 타입이 INT 타입으로 변경된 것을 확인할 수 있다. 이제 다시 기존의 VARCHAR 타입으로 다시 변경시켜보도록 하자.
INPUT
ALTER TABLE sktplayer MODIFY COLUMN position VARCHAR(10);
다시 position의 타입을 VARCHAR 타입으로 변경했다.
INPUT
DESC sktplayer;
OUTPUT
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| name | varchar(10) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| position | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
DESC 명령어로 확인한 결과 position의 필드 타입이 다시 VARCHAR 타입으로 변경된 것을 확인할 수 있다.
ALTER 명령어를 활용한 데이터베이스 및 테이블의 내용을 수정하는 방법을 알아봤다. 이번 글은 여기서 마치고 다음 글에서 공부를 이어가 보자.