코딩하는 몽구리

테이블의 컬럼 구조 변경하기 본문

SQL

테이블의 컬럼 구조 변경하기

코딩구리 2024. 4. 21. 16:34

1. 테이블에 컬럼 추가 및 변경하기 

student 테이블에 gender 컬럼을 생성하는 방법에 대해 알아볼게요. 테이블에 컬럼을 생성할 때에는 ALTER문을 활용하면됩니다. 

ALTER TABLE student ADD gender CHAR(1) NULL;

ALTER TABLE은 테이블을 변경하겠다는 의미이고, ADD는 추가하라는 의미입니다. gender라는 새로운 컬럼을 추가하고 그 컬럼의 타입과 속성이 들어가 있습니다. gender 컬럼은 CHAR(1)타입이고, NULL을 허용하게 됩니다.

gender라는 새로운 컬럼이 추가된 것을 확인할 수 있습니다. 

이번에는 컬럼의 이름을 변경해보도록 할게요. student 테이블을 보면 student_number라는 컬럼이 존재합니다. student_number컬럼을 registration_number라는 컬럼으로 변경해보도록 하겠습니다. 

ALTER TABLE student 
	RENAME COLUMN student_number TO registration_number;

ALTER TABLE까지는 컬럼을 추가하는 것과 동일합니다. RENAME COLUMN은 의미 그대로 컬럼의 이름을 다시 지으라는 의미입니다. student_number라는 이름을 registration_number로 수정하라는 의미입니다. 이 SQL문을 실행하고 다시 테이블을 확인하면 registraion_number로 컬럼명이 변경된 것을 확인할 수 있습니다. 

2. 컬럼 삭제와 컬럼 데이터 타입 변경

컬럼데이터 삭제

이번에는 컬럼을 삭제하고 데이터 타입을 변경하는 방법에 대해 알아볼게요. 먼저, admission_date 컬럼을 삭제해보도록 할게요. 

ALTER TABLE student 
	DROP COLUMN admission_date;

ALTER TABLE은 마찬가지로 테이블을 변경하겠다는 의미입니다. 그리고 DROP COLUMN을 적었는데 DROP은 원래 떨어뜨리다 라는 뜻을 가지고 있습니다.  SQL에서는 주로 무언가를 삭제할 때 사용합니다. 

SQL문을 실행하고 다시 테이블을 조회해보면 admission_date컬럼이 삭제된 것을 확인할 수 있습니다. 

컬럼 데이터타입 변경

이번에는 major 컬럼의 데이터 타입을 변경해주도록 할게요. major 컬럼은 현재 문자열로 되어있습니다. 문자열로 사용하지 않고, 전공 코드번호로 수정해보도록 할게요. 

ALTER TABLE student MODIFY major INT;

MODIFY 는 '수정하다, 변경하다'라는 뜻을 가지고 있습니다.  MODIFY 일반적으로 데이터타입 및 속성을 변경할 때 사용합니다. major 라는 컬럼의 데이터 타입을 INT 형으로 변환하는 것이죠. 해당 SQL문을 실행하게 되면 아래와 같은 에러가 발생하게 됩니다. ??!!

그 이유가 무엇일까요?

Error Code: 1366. Incorrect integer value: '컴퓨터공학과' for column 'major' at row 1

Response를 복사해서 확인하게 되면 정수가 아닌 값이 들어가 있는 뜻입니다. 지금 에러가 발생하는 이유는 major값에 원래 들어있던 값이 INT가 아니라 문자열이 들어가 있기 때문입니다. 그러면 에러가 발생하지 않게 만들기 위해서는 원래 있던 값을 정수로 바꿔준 다음에 데이터 타입을 INT로 변경해줘야 합니다. 

UPDATE student SET major = 10 WHERE major = '컴퓨터공학과';
UPDATE student SET major = 12 WHERE major = '법학과';

마찬가지로 가지고 있는 값들을 변경해주려고 하는데 에러가 발생했습니다. 

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.  To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

‘safe update 모드를 사용 중일 때는, KEY column을 사용해서 테이블을 갱신해야 한다.'는 뜻입니다. 'safe update'모드란, 말 그대로 '안전한 갱신성'을 보장하기 위한 모드입니다. 

WHERE 절에 PRIMARY KEY가 사용되지 않은 UPDATE문이 실행되지 않도록 막아놓은 것입니다.

이는 UPDATE문을 주의깊게 사용하지 않아 발생하는 문제점을 미연에 방지하기 위함입니다.  그러면, 이 safe update 모드를 꺼보도록 하겠습니다.

Edit -> Preference 를 클릭한 다음, SQL Editor 로 들어간 다음 Safe Update의 체크박스를 해제하고 Ok를 눌러주시면 safe update 모드를 해제할 수 있습니다. 

이렇게 설정한 다음 서버를 재접속 한 다음 다시 UPDATE문을 실행해보도록 하겠습니다. 

UPDATE student SET major = 10 WHERE major = '컴퓨터공학과';
UPDATE student SET major = 12 WHERE major = '법학과';

이제 UPDATE문이 정상적으로 작동하는 것을 확인할 수 있습니다. major에 있는 값들을 정수로 변환한 뒤 컬럼의 데이터 타입도 변경해줄게요.

ALTER TABLE student MODIFY major INT;

정상적으로 테이블의 데이터 타입을 변경할 수 있습니다. 

DESCRIBE student;

DESCRIBE를 통해서 테이블을 확인해도 major 컬럼의 타입이 INT로 변경되어 있는 것을 확인할 수 있습니다. 

이상으로 SQL에서 컬럼을 추가, 수정, 데이터 타입 변경하는 방법에 대해 알아봤습니다.