MySQL에서
ALTER TABLE문을 사용하여 테이블을 수정합니다.
CREATE TABLE students (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
grade CHAR(1)
);
INSERT INTO students (name, grade)
VALUES
('Alice', 'A'),
('Bob', 'B'),
('Charlie', 'C');
| id | name | grade | |
|---|---|---|---|
| 1 | Alice | A | |
| 2 | Bob | B | |
| 3 | Charlie | C |
구문
ALTER TABLE 테이블명 ADD 열이름 데이터타입;
예시 코드
ALTER TABLE students ADD birthdate DATE;
students 테이블에 birthdate라는 이름의 DATE 형식의 열을 추가합니다.
| id | name | grade | birthdate | |
|---|---|---|---|---|
| 1 | Alice | A | NULL | |
| 2 | Bob | B | NULL | |
| 3 | Charlie | C | NULL |
birthdate 열이 추가되었지만, 아직 데이터가 없으므로 값은 모두 NULL로 표시됩니다.
구문
ALTER TABLE 테이블명 DROP COLUMN 열이름;
예시 코드
ALTER TABLE students DROP COLUMN birthdate;
students 테이블에서 birthdate 열을 삭제하는 명령입니다.
| id | name | grade | |
|---|---|---|---|
| 1 | Alice | A | |
| 2 | Bob | B | |
| 3 | Charlie | C |
birthdate 열이 삭제되고 원래의 테이블로 돌아갑니다.
열의 이름을 변경하거나 데이터 타입을 수정할 수 있습니다.
구문
ALTER TABLE 테이블명 CHANGE COLUMN 기존열이름 새열이름 새데이터타입;
예시 코드
ALTER TABLE students CHANGE COLUMN grade student_grade VARCHAR(2)
grade 열의 이름을 student_grade로 변경하고, 데이터 타입을 VARCHAR(2)로 수정합니다.
테이블 구조 출력시 student_grade type이 VARCHAR(2) 로 변경된 것을 볼 수 있습니다.
DESC students;
| Field | Type | Null | Key | Default | Extra | |
|---|---|---|---|---|---|---|
| id | int | NO | PRI | auto_increment | ||
| name | varchar(50) | YES | ||||
| student_grade | varchar(2) | YES |
열 이름은 그대로 유지하면서 데이터 타입만 변경하고 싶을 때는 MODIFY를 사용합니다.
구문
ALTER TABLE 테이블명 MODIFY COLUMN 열이름 새데이터타입;
예시 코드
ALTER TABLE students MODIFY COLUMN student_grade CHAR(2);
student_grade 열의 데이터 타입을 CHAR(2)로 변경합니다.
테이블 구조 출력시 student_grade type이 CHAR(2) 로 변경된 것을 볼 수 있습니다.
DESC students;
| Field | Type | Null | Key | Default | Extra | |
|---|---|---|---|---|---|---|
| id | int | NO | PRI | auto_increment | ||
| name | varchar(50) | YES | ||||
| student_grade | char(2) | YES |
기존 열에 기본값을 설정할 때는 ALTER TABLE과 SET DEFAULT를 사용합니다.
구문
ALTER TABLE 테이블명 ALTER COLUMN 열이름 SET DEFAULT 기본값;
예시 코드
ALTER TABLE students ALTER COLUMN grade SET DEFAULT 'A';
grade 열의 기본값을 'A'로 설정합니다.
INSERT INTO students (name) VALUES ('David');
| id | name | student_grade | |
|---|---|---|---|
| 1 | Alice | A | |
| 2 | Bob | B | |
| 3 | Charlie | C | |
| 4 | David | A |
David 학생은 student_grade 값이 지정되지 않았으므로 기본값으로 'A'가 자동으로 삽입되었습니다.
기본값을 제거하고 싶다면 DROP DEFAULT를 사용합니다.
구문
ALTER TABLE 테이블명 ALTER COLUMN 열이름 DROP DEFAULT;
예시 코드
ALTER TABLE students ALTER COLUMN student_grade DROP DEFAULT;
INSERT INTO students (name) VALUES ('Eve');
| id | name | student_grade | |
|---|---|---|---|
| 1 | Alice | A | |
| 2 | Bob | B | |
| 3 | Charlie | C | |
| 4 | David | A | |
| 5 | Eve | NULL |
기본값이 제거되었기 때문에, Eve의 student_grade 값이 NULL로 설정됩니다.
구문
ALTER TABLE 기존테이블명 RENAME TO 새테이블명;
예시 코드
ALTER TABLE students RENAME TO learners;
아래 SELECT 문 실행 시 수정된 테이블명이 적용되었음을 알 수 있습니다.
SELECT * FROM students; -- table명 수정으로 존재 x
SELECT * FROM learners;