본문 바로가기
Database/MySQL

[Programming][MySQL] 테이블 가공하기(ALTER)

by LydiaRyu 2021. 8. 4.
반응형

 

 

ALTER TABLE ~ 을 이용하여 데이터에 열을 추가하거나, 수정하고 다양하게 가공할 수 있다.

 

  • ALTER TABLE ~ ADD
ALTER TABLE customer
ADD grade INT NOT NULL;

ALTER TABLE customer
ADD location CHAR(2) NULL;

 

ALTER TABLE [테이블 이름] ADD [추가할 열] [데이터 타입] [NULL 허용 여부]를 이용해서 열을 추가할 수 있다. 

실습에서는 등급을 정수형 변수로 넣고, 지역을 나타내기 위해 문자형 변수로 추가했다. 다양한 조건들을 뒤에 더 넣을 수 있지만, 일단은 기본적인 것만 작성했다. 

 

다음과 같이 테이블에 grade와 location 열(Column)이 잘 추가하고, grade는 범위를 구분하여 작성했고, location은 임의로 값을 넣어 작성했다.

 

UPDATE customer SET grade = 1 WHERE score BETWEEN 81 AND 100;
UPDATE customer SET grade = 2 WHERE score BETWEEN 61 AND 80;
UPDATE customer SET grade = 3 WHERE score BETWEEN 41 AND 60;
UPDATE customer SET grade = 4 WHERE score BETWEEN 21 AND 40;
UPDATE customer SET grade = 5 WHERE score BETWEEN 0 AND 20;

UPDATE customer SET location = "경기" WHERE id = 1;
UPDATE customer SET location = "서울" WHERE id = 2;
UPDATE customer SET location = "제주"  WHERE id = 3;

 

  • ALTER TABLE ~ RENAME COLUMN ~ TO
ALTER TABLE customer
RENAME COLUMN feedback TO comment;

 

ALTER TABLE [테이블 이름] RENAME COLUMN [기존의 열] TO [변경할 열]으로 열의 이름을 바꿀 수 있다. 지금은 'feedback'이라고 작성되어있던 열(Column)을 'comment'로 변경했다.

 

 

  • ALTER TABLE ~ DROP COLUMN
ALTER TABLE customer
DROP COLUMN score;

 

 평가하는 항목을 grade만 남기기 위해 score 열(Column)을 지우기로 하자. ALTER TABLE [테이블 이름] DROP COLUMN [삭제할 열]을 사용하여 변수를 삭제할 수 있다.

 

 

  • ALTER TABLE ~ MODIFY

category 열을 문자형 변수로 나누지 말고, [101: 한식, 102: 양식, 103: 일식, 104: 중식, 105: 기타]와 같이 번호로 구분해 보기로 하자. 

 

UPDATE customer SET category = 101 WHERE category = '한식';
UPDATE customer SET category = 102 WHERE category = '양식';
UPDATE customer SET category = 103 WHERE category = '일식';
UPDATE customer SET category = 104 WHERE category = '중식';
UPDATE customer SET category = 105 WHERE category = '기타';

 

변수 타입을 바꿔주기 위해서는 먼저, 바꾸고자 하는 변수 타입에 맞춰 변수 값들을 변경해야 한다.

지금은 문자형을 숫자형(INT)으로 바꿀 것이기 때문에 SET 뒤에 숫자형으로 일치시켜주고, WHERE 뒤에 변경하려는 값들을 작성했다. 

 

ALTER TABLE customer 
MODIFY category INT NOT NULL DEFAULT 000;

 

option으로 category열(Column)에 NOT NULL을 설정하고, 만약 NULL 값이 입력되면 000으로 작성될 수 있도록 DEFAULT 000으로 설정했다. NULL 값을 어떠한 기본 값으로 대체하고 싶을 때 DEFAULT 명령어로 작성하면 된다. 

 

  • COLUMN 순서 바꾸기
ALTER TABLE customer 
MODIFY grade INT NOT NULL AFTER main_menu;

 

열(Column)의 순서를 바꾸고 싶다면 AFTER을 사용해서 원하는 열(Column) 뒤에 위치하도록 한다. 결과와 같이 등급이 main_menu뒤에 잘 나왔다. 

 

만약, 제일 앞에 위치하도록 하고 싶으면 AFTER 대신에 FIRST를 사용하면 된다. (ALTER TABLE customer 
MODIFY grade INT NOT NULL FIRST;)



  • ALTER TABLE ~ ADD CONSTRAINT ~ CHECK
ALTER TABLE customer 
ADD CONSTRAINT grade_cons CHECK (grade <= 5);

 

ADD CONSTRAINT ~ CHECK를 사용해서 값에 제약 조건을 걸 수 있다. 여기에서는 등급이 1~5까지 밖에 없으므로 5 이하의 값만 입력될 수 있도록 작성했다. 

 

INSERT INTO customer
(category, main_menu, comment,  date, grade, location)
VALUES (103, '초밥', '싱싱한 회와 다채로운 조화가 예술', '2021-08-09', 50, '충청');

만약 이와 같이 등급에 50으로 값이 잘못 입력되었다고 하자. 위에서 5 이하의 값으로 제약을 걸었기 때문에 오류가 발생한다. 

 

Error Code: 3819. Check constraint 'grade_cons' is violated.

 

INSERT INTO customer
(category, main_menu, comment,  date, grade, location)
VALUES (103, '초밥', '싱싱한 회와 다채로운 조화가 예술', '2021-08-09', 2, '충청');

 

grade의 값을 2로 수정하면 제약 조건의 범위 안에 들어가기 때문에 잘 추가되어 작성된 것을 볼 수 있다. 

만약, 제약 조건을 삭제하고 싶다면 ALTER TABLE customer DROP CONSTRAINT grade_cons로 작성하면 삭제할 수 있다.

 

  • ALTER TABLE ~ CHANGE ~
ALTER TABLE customer 
CHANGE grade star DOUBLE NOT NULL;

 

열(Column)의 이름과 데이터 타입을 동시에 바꾸고 싶다면, MODIFY로 따로 두 번 작성하지 않고 CHANGE를 사용해서 바꿀 수 있다. INT 형식의 grade열(Column)을 DOUNBLE 형식의 star(Column)로 변경해주었다.

 

 

 

ALTER 구문은 매번 따로 작성해 주지 않고, CHANGE/ DROP/ RENAME COLUMN 등 조건들을 나열하여 아래와 같이 한 번에 작성하는 것도 가능하다.

 

ALTER TABLE customer 
CHANGE grade star DOUBLE NOT NULL,
ADD age INT NOT NULL,
DROP COLUMN category,
RENAME COLUMN comment TO opinion,
MODIFY opinion TEXT;

 

(예시를 위해 작성한 코드로 실제로 실행하지는 않았다!)

728x90

댓글