MYSQL – ALTER, DROP, RENAME, MODIFY
⚡ 스마트 요약
ALTER, DROP, RENAME, 및 MODIFY는 다음과 같습니다. MySQL 이미 사용 중인 데이터베이스를 재구성하는 명령어입니다. 이러한 명령어를 사용하면 테이블이나 열과 같은 객체를 추가, 제거, 이름 변경 및 재정의할 수 있으며, 이미 저장된 행은 삭제되지 않습니다.

ALTER 명령어는 무엇인가요? MySQL?
The 바꾸다 `modules` 명령어는 데이터베이스의 수명 주기 동안 변경이 필요한 기존 데이터베이스, 테이블, 뷰 또는 기타 데이터베이스 객체를 수정합니다. 이 명령어를 통해 스키마는 이미 생성되고 데이터가 채워진 후에도 계속 발전할 수 있습니다.
비즈니스 요구사항은 거의 고정되어 있지 않으며, 데이터베이스 설계 또한 그에 맞춰 변화해야 합니다. 예를 들어, Myflix 데이터베이스 설계가 완료되어 사용자들이 이를 사용하고 있는 상황에서, 중요한 정보가 누락되었다는 사실을 팀에서 깨달았다고 가정해 보겠습니다. 기존 데이터를 삭제하고 싶어하는 사람은 아무도 없으며, 단지 새로운 정보를 기존 데이터와 함께 기록하고 싶어할 뿐입니다.
ALTER 문은 바로 그러한 상황을 다룹니다. 필드의 데이터 형식을 문자열에서 숫자로 변경하거나, 필드 이름을 바꾸거나, 테이블에 완전히 새로운 열을 추가하는 등의 작업을 수행할 수 있으며, 테이블에 이미 저장된 데이터는 그대로 유지됩니다.
명령의 목적이 정해졌으므로 다음 단계는 그 명령을 실행하는 구문을 작성하는 것입니다.
MySQL ALTER 구문
기존 테이블에 열을 추가하는 데 사용되는 기본 구문은 다음과 같습니다.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
여기를 클릭하십시오.
- "ALTER TABLE `테이블_이름`" 알려주는 명령이다 MySQL 서버에서 `table_name`이라는 테이블을 수정합니다.
- "컬럼 `열_이름` `데이터_유형` 추가" 알려주는 명령이다 MySQL 서버에 `column_name`이라는 이름의 새 열을 `data_type`이라는 데이터 형식으로 추가해 주세요.
Myflix가 온라인 결제 시스템을 도입했다고 가정해 보겠습니다. 이를 지원하기 위해 회원 테이블에 신용카드 번호를 입력하는 필드를 추가해야 합니다. 수정 작업을 하기 전에 현재 테이블 구조를 살펴보는 것이 좋습니다. 아래 스크립트는 그 작업을 수행합니다.
SHOW COLUMNS FROM `members`;
| 분야 | 타입 | null로 | 키 | 태만 | 여분의 |
|---|---|---|---|---|---|
| 회원_번호 | 정수 (11) | 아니 | PRI | NULL | 자동 증가 |
| 전체 이름 | varchar(350) | 아니 | NULL | ||
| 성별 | varchar(6) | 예 | NULL | ||
| 생일 | 데이터 | 예 | NULL | ||
| 물리적_주소 | varchar(255) | 예 | NULL | ||
| 우편 주소 | varchar(255) | 예 | NULL | ||
| 연락처 | varchar(75) | 예 | NULL | ||
| 이메일 | varchar(255) | 예 | NULL |
💡 int(11)에 대한 참고 사항: 괄호 안의 숫자는 단순히 화면 표시 너비일 뿐입니다. MySQL 8.0.17 버전에서 정수형에 대해 해당 기능이 더 이상 사용되지 않으므로 최신 서버에서는 이 열을 단순히 다음과 같이 보고합니다. INT저장 용량은 변경되지 않았습니다.
아래 스크립트는 멤버 테이블에 새 필드를 추가합니다.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
myflixdb에 대해 이 스크립트를 실행하면 members 테이블에 VARCHAR 데이터 형식의 credit_card_number라는 열이 추가됩니다. SHOW COLUMNS 스크립트를 다시 실행하면 다음과 같은 결과가 나타납니다.
| 분야 | 타입 | null로 | 키 | 태만 | 여분의 |
|---|---|---|---|---|---|
| 회원_번호 | 정수 (11) | 아니 | PRI | NULL | 자동 증가 |
| 전체 이름 | varchar(350) | 아니 | NULL | ||
| 성별 | varchar(6) | 예 | NULL | ||
| 생일 | 데이터 | 예 | NULL | ||
| 물리적_주소 | varchar(255) | 예 | NULL | ||
| 우편 주소 | varchar(255) | 예 | NULL | ||
| 연락처 | varchar(75) | 예 | NULL | ||
| 이메일 | varchar(255) | 예 | NULL | ||
| 신용 카드 번호 | varchar(25) | 예 | NULL |
강조 표시된 행은 credit_card_number가 members 테이블에 추가되었으며, 다른 열에 이미 저장된 데이터는 이번 추가로 인해 변경되지 않았음을 확인시켜 줍니다.
열을 추가하는 것은 절반의 과정일 뿐입니다. 스키마는 더 이상 필요하지 않은 객체를 제거해야 하는데, 이것이 바로 DROP 명령의 역할입니다.
DROP 명령어는 무엇인가요? MySQL?
DROP 명령어는 객체를 영구적으로 삭제합니다. 이 명령어는 다음과 같은 용도로 사용됩니다.
- 데이터베이스를 삭제합니다 MySQL 섬기는 사람.
- 데이터베이스에서 테이블이나 열과 같은 객체를 삭제합니다.
⚠️ 경고: DROP 작업은 되돌릴 수 없습니다. 백업 없이는 객체나 그 안에 있는 행을 복구할 수 없으므로, 대상에 대해 SELECT 쿼리를 실행하고 백업을 먼저 확인하십시오.
드롭ping 기둥
위의 ALTER 예제에서는 members 테이블에 credit_card_number라는 열이 추가되었습니다. 온라인 결제 기능이 연기되어 해당 열을 다시 제거해야 한다고 가정해 보겠습니다. 다음 스크립트는 이를 수행합니다.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
스크립트를 실행하면 members 테이블에서 credit_card_number 열이 삭제됩니다. 열 목록을 다시 확인하면 결과가 맞는 것을 알 수 있습니다.
SHOW COLUMNS FROM `members`;
| 분야 | 타입 | null로 | 키 | 태만 | 여분의 |
|---|---|---|---|---|---|
| 회원_번호 | 정수 (11) | 아니 | PRI | NULL | 자동 증가 |
| 전체 이름 | varchar(350) | 아니 | NULL | ||
| 성별 | varchar(6) | 예 | NULL | ||
| 생일 | 데이터 | 예 | NULL | ||
| 물리적_주소 | varchar(255) | 예 | NULL | ||
| 우편 주소 | varchar(255) | 예 | NULL | ||
| 연락처 | varchar(75) | 예 | NULL | ||
| 이메일 | varchar(255) | 예 | NULL |
신용카드 번호가 필드 목록에서 사라졌습니다.
드롭 테이블
데이터베이스에서 테이블 전체를 삭제하는 구문은 다음과 같습니다.
DROP TABLE `sample_table`;
실제 사물에 적용하면 이 문장은 다음과 같습니다.
DROP TABLE `categories_archive`;
이 명령어를 실행하면 `categories_archive`라는 테이블과 그 안에 있는 모든 행이 데이터베이스에서 삭제됩니다.
DROP 데이터베이스
동일한 키워드를 사용하면 전체 스키마가 삭제됩니다. IF EXISTS를 추가하면 해당 오류가 발생하지 않습니다. MySQL 대상이 이미 사라졌을 때 예외를 발생시키는데, 이는 여러 번 실행되는 스크립트 내에서 유용합니다.
DROP DATABASE IF EXISTS `myflixdb_backup`;
객체를 삭제하는 것은 영구적인 작업입니다. 객체 자체는 유지되어야 하고 이름만 잘못된 경우에는 이름 변경(RENAME) 명령을 사용해야 합니다.
RENAME 명령어는 무엇인가요? MySQL?
RENAME 명령은 테이블이나 열과 같은 기존 데이터베이스 객체의 이름을 새 이름으로 변경합니다. 테이블 이름을 변경해도 테이블에 포함된 데이터는 손실되지 않습니다.
해당 명령어는 다음과 같은 기본 구문을 가지고 있습니다.
RENAME TABLE `current_table_name` TO `new_table_name`;
movierentals 테이블의 이름을 movie_rentals로 변경하려면 아래 스크립트를 사용합니다.
RENAME TABLE `movierentals` TO `movie_rentals`;
이 명령어를 실행하면 `movierentals` 테이블의 이름이 `movie_rentals`로 변경됩니다. 이름 변경은 단순히 레이블만 바꾸는 것이므로, 동일한 명령어를 반대로 실행하면 원래 이름으로 복원됩니다.
RENAME TABLE `movie_rentals` TO `movierentals`;
RENAME TABLE은 테이블 이름을 변경하는 기능을 합니다. 테이블 이름을 변경하려면 다음을 수행하세요. 칼럼그리고 그 내용을 바꾸는 것은 CHANGE 키워드의 역할입니다.
변경 키워드
CHANGE 키워드를 사용하면 다음을 수행할 수 있습니다.
- 열 이름을 변경하세요
- 열 데이터 형식을 변경하세요
- 열 제약 조건을 변경하세요
예를 들어 보겠습니다. 아래 스크립트에서 확인할 수 있듯이 members 테이블의 full_names 필드는 너비가 350인 varchar 데이터 형식입니다.
SHOW COLUMNS FROM `members`;
| 분야 | 타입 | null로 | 키 | 태만 | 여분의 |
|---|---|---|---|---|---|
| 회원_번호 | 정수 (11) | 아니 | PRI | NULL | 자동 증가 |
| 전체 이름 | varchar(350) | 아니 | NULL | ||
| 성별 | varchar(6) | 예 | NULL | ||
| 생일 | 데이터 | 예 | NULL | ||
| 물리적_주소 | varchar(255) | 예 | NULL | ||
| 우편 주소 | varchar(255) | 예 | NULL | ||
| 연락처 | varchar(75) | 예 | NULL | ||
| 이메일 | varchar(255) | 예 | NULL |
요구 사항이 다음과 같다고 가정해 봅시다.
- 필드 이름을 "full_names"에서 "fullname"으로 변경하세요.
- 이를 너비가 250인 char 데이터 형식으로 변경하세요.
- NOT NULL 제약 조건 추가
세 가지 수정 사항은 모두 하나의 CHANGE 문으로 실행됩니다.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
myflixdb를 대상으로 실행한 다음 SHOW COLUMNS 스크립트를 실행하면 다음과 같은 결과가 나타납니다.
| 분야 | 타입 | null로 | 키 | 태만 | 여분의 |
|---|---|---|---|---|---|
| 회원_번호 | 정수 (11) | 아니 | PRI | NULL | 자동 증가 |
| 성명 | char (250) | 아니 | NULL | ||
| 성별 | varchar(6) | 예 | NULL | ||
| 생일 | 데이터 | 예 | NULL | ||
| 물리적_주소 | varchar(255) | 예 | NULL | ||
| 우편 주소 | varchar(255) | 예 | NULL | ||
| 연락처 | varchar(75) | 예 | NULL | ||
| 이메일 | varchar(255) | 예 | NULL |
해당 열의 이름은 이제 fullname이며 char(250) 형식을 저장하고 NULL 값을 거부합니다.
수정 키워드
MODIFY 키워드를 사용하면 다음을 수행할 수 있습니다.
- 열 데이터 형식을 수정합니다.
- 열 제약 조건을 수정하세요
위의 변경 예시에서는 이름 변경이 목표의 일부에 불과했음에도 불구하고 필드 이름을 두 번 입력해야 했습니다. CHANGE 문에서 필드 이름을 생략하면 오류가 발생합니다. 데이터 형식과 제약 조건만 조정하고 이름은 그대로 유지해야 하는 경우, MODIFY 명령어를 사용하면 열을 한 번만 지정하여 작업을 수행할 수 있습니다.
아래 스크립트는 "전체 이름" 필드의 너비를 250에서 50으로 변경합니다.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
myflixdb를 대상으로 실행한 다음 SHOW COLUMNS 스크립트를 실행하면 아래와 같은 결과가 나타납니다.
| 분야 | 타입 | null로 | 키 | 태만 | 여분의 |
|---|---|---|---|---|---|
| 회원_번호 | 정수 (11) | 아니 | PRI | NULL | 자동 증가 |
| 성명 | char (50) | 아니 | NULL | ||
| 성별 | varchar(6) | 예 | NULL | ||
| 생일 | 데이터 | 예 | NULL | ||
| 물리적_주소 | varchar(255) | 예 | NULL | ||
| 우편 주소 | varchar(255) | 예 | NULL | ||
| 연락처 | varchar(75) | 예 | NULL | ||
| 이메일 | varchar(255) | 예 | NULL |
⚠️ 경고: 열 크기를 줄이면 더 이상 맞지 않는 데이터가 잘립니다. 50자보다 긴 이름은 이 명령에 의해 잘리므로, 기존 값 중 가장 긴 값을 확인하십시오. SELECT 필드 크기를 줄이기 전에 쿼리를 실행하세요.
열 변경, 수정, 열 이름 변경
세 가지 키워드는 서로 겹치는 부분이 있으며, 잘못된 키워드를 선택하는 것이 이 분야에서 가장 흔한 오류 원인입니다. 아래 표는 이 키워드들을 나란히 비교한 것입니다.
| 키워드 | 열 이름을 변경합니다 | 유형 및 제약 조건을 변경합니다. | 이전 이름이 필요합니다 | 일반적인 사용 |
|---|---|---|---|---|
| 변경 | 가능 | 가능 | 네, 새 이름도 포함해서요. | 이름 변경과 재정의를 하나의 명령으로 수행 |
| 수정 | 아니 | 가능 | 한 번 이름이 주어졌습니다. | 열의 너비를 넓히거나 좁히거나, 또는 열의 유형을 변경합니다. |
| 열 이름 변경 | 가능 | 아니 | 네, 새 이름도 포함해서요. | 이름만 변경하세요. MySQL 8.0년부터 |
MySQL 8.0 버전에서는 가장 간단한 경우를 위한 네 번째 옵션으로, 재정의 없이 이름만 변경하는 기능을 추가했습니다.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
데이터 유형과 이름은 정해졌습니다. 남은 질문은 새 열이 테이블의 어느 위치에 자리 잡을 것인가인데, 이는 AFTER 키워드가 제어합니다.
AFTER 키워드
기본적으로 ALTER TABLE 명령으로 추가된 열은 테이블의 맨 끝에 위치합니다. 특정 위치에 추가하려면 ALTER 명령에 AFTER 키워드를 함께 사용합니다.
아래 스크립트는 members 테이블에서 date_of_birth 바로 뒤에 date_of_registration을 추가합니다.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
myflixdb를 대상으로 실행한 다음 SHOW COLUMNS 스크립트를 실행하면 아래와 같은 결과가 나타납니다.
| 분야 | 타입 | null로 | 키 | 태만 | 여분의 |
|---|---|---|---|---|---|
| 회원_번호 | 정수 (11) | 아니 | PRI | NULL | 자동 증가 |
| 성명 | char (50) | 아니 | NULL | ||
| 성별 | varchar(6) | 예 | NULL | ||
| 생일 | 데이터 | 예 | NULL | ||
| 등록일 | 데이터 | 예 | NULL | ||
| 물리적_주소 | varchar(255) | 예 | NULL | ||
| 우편 주소 | varchar(255) | 예 | NULL | ||
| 연락처 | varchar(75) | 예 | NULL | ||
| 이메일 | varchar(255) | 예 | NULL |
강조 표시된 행은 date_of_birth 열 다음에 추가된 열입니다. FIRST 키워드도 같은 방식으로 작동하며 새 열을 테이블의 맨 앞으로 이동시킵니다.
