MYSQL – ALTER, DROP, RENAME, MODIFY

⚡ 스마트 요약

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

  • 🛠️ ALTER 명령: ALTER TABLE 명령은 이미 존재하는 객체를 재정의하므로, 기존 스키마는 재구축 없이 새로운 요구 사항을 반영할 수 있습니다.
  • 열 추가: ALTER TABLE ADD COLUMN 명령은 필드를 추가하며, 기존 행은 기존에 가지고 있던 모든 값을 그대로 유지합니다.
  • 🗑️ DROP 명령어: DROP 명령어는 데이터베이스, 테이블 또는 ALTER TABLE DROP COLUMN 명령어를 통해 단일 열을 영구적으로 삭제합니다.
  • 🔁 이름 변경 명령: 테이블 이름 변경 명령은 테이블 이름만 변경하며, 테이블 안의 데이터는 손실되지 않습니다.
  • ✏️ 변경 키워드: CHANGE 명령은 하나의 문으로 열 이름을 변경하고 해당 열의 형식과 제약 조건을 재정의하므로 두 열 이름 모두 필수입니다.
  • 🧩 수정 키워드: MODIFY는 유형과 제약 조건을 변경하는 동시에 유지합니다.ping 이름, 글자만 수정할 경우 더 안전한 선택입니다.
  • 📍 AFTER 키워드: AFTER 연산자는 새로 추가된 열을 테이블의 끝이 아닌 선택한 위치에 배치합니다.

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 명령어는 객체를 영구적으로 삭제합니다. 이 명령어는 다음과 같은 용도로 사용됩니다.

  1. 데이터베이스를 삭제합니다 MySQL 섬기는 사람.
  2. 데이터베이스에서 테이블이나 열과 같은 객체를 삭제합니다.

⚠️ 경고: 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 키워드를 사용하면 다음을 수행할 수 있습니다.

  1. 열 이름을 변경하세요
  2. 열 데이터 형식을 변경하세요
  3. 열 제약 조건을 변경하세요

예를 들어 보겠습니다. 아래 스크립트에서 확인할 수 있듯이 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

요구 사항이 다음과 같다고 가정해 봅시다.

  1. 필드 이름을 "full_names"에서 "fullname"으로 변경하세요.
  2. 이를 너비가 250인 char 데이터 형식으로 변경하세요.
  3. 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 키워드를 사용하면 다음을 수행할 수 있습니다.

  1. 열 데이터 형식을 수정합니다.
  2. 열 제약 조건을 수정하세요

위의 변경 예시에서는 이름 변경이 목표의 일부에 불과했음에도 불구하고 필드 이름을 두 번 입력해야 했습니다. 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 키워드도 같은 방식으로 작동하며 새 열을 테이블의 맨 앞으로 이동시킵니다.

자주 묻는 질문

아니요. ALTER, DROP, RENAME과 같은 DDL 문은 암묵적으로 커밋됩니다. MySQL따라서 현재 진행 중인 거래로는 해당 변경 사항을 되돌릴 수 없습니다. 백업에서 복원하는 것이 유일한 복구 방법입니다.

변경 내용에 따라 다릅니다. 많은 InnoDB 변경 작업은 온라인으로 실행되어 동시 읽기 및 쓰기를 허용하지만, 테이블 전체를 복사하고 쓰기를 차단하는 작업도 있습니다. 허용할 변경 사항을 명시하기 위해 ALGORITHM 및 LOCK 절을 추가하세요.

DROP은 객체 자체를 제거합니다. TRUNCATE는 테이블을 비우지만 테이블 구조는 유지합니다. 삭제 선택한 행을 제거하며 WHERE 절을 사용하여 필터링할 수 있습니다.

일반적으로 그렇습니다. 클라이언트에 내장된 AI 비서(예: ...) MySQL 워크 벤치 "date_of_birth 다음에 null 값을 허용하는 날짜 열을 추가해 주세요"와 같은 요청을 유효한 구문으로 변환합니다. Rev실행하기 전에 생성된 구문을 실제 스키마와 비교하여 확인하십시오.

부분적으로만 그렇습니다. AI 검토 도구는 쿼리에 여전히 이름이 남아 있는 삭제된 열이나 데이터가 잘리는 축소된 유형과 같은 명백한 위험 요소를 표시합니다. 하지만 모든 호출자를 확인할 수는 없으므로 스테이징 실행이 여전히 필요합니다.

이 게시물을 요약하면 다음과 같습니다.