• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    1. ALTER DATABASE 구문
    2. ALTER EVENT 구문
    3. ALTER LOGFILE GROUP 구문
    4. ALTER FUNCTION 구문
    5. ALTER PROCEDURE 구문
    6. ALTER SERVER 구문
    7. ALTER TABLE 구문
    1. ALTER TABLE 파티션 작업
    2. MySQL Cluster에서 ALTER TABLE 온라인 조작
    3. ALTER TABLE의 예
    8. ALTER TABLESPACE 구문
    9. ALTER VIEW 구문
    10. REATE DATABASE 구문
    11. CREATE EVENT 구문
    12. CREATE FUNCTION 구문
    13. CREATE INDEX 구문
    14. CREATE LOGFILE GROUP 구문
    15. CREATE PROCEDURE 및 CREATE FUNCTION 구문
    16. CREATE SERVER 구문
    17. CREATE TABLE 구문
    18. CREATE TABLESPACE 구문
    19. CREATE TRIGGER 구문
    20. CREATE VIEW 구문
    21. DROP DATABASE 구문
    22. DROP EVENT 구문
    23. DROP FUNCTION 구문
    24. DROP INDEX 구문
    25. DROP LOGFILE GROUP 구문
    26. DROP PROCEDURE 및 DROP FUNCTION 구문
    27. DROP SERVER 구문
    28. DROP TABLE 구문
    29. DROP TABLESPACE 구문
    30. DROP TRIGGER 구문
    31. DROP VIEW 구문
    32. RENAME TABLE 구문
    33. TRUNCATE TABLE 구문
    2. 데이터 조작 문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.1.7.3 ALTER TABLE의 예

다음과 같이 작성되는 테이블 t1 에서 시작합니다.

 CREATE TABLE t1 (a INTEGER, b CHAR (10));

테이블의 이름을 t1 에서 t2 로 변경하려면 다음과 같이합니다.

 ALTER TABLE t1 RENAME t2;

컬럼 a 를 INTEGER 에서 TINYINT NOT NULL 로 변경 (이름은 동일하게 유지합니다) 또한 열 b 를 CHAR(10) 에서 CHAR(20) 으로 변경하고, 그 이름을 b 에서 c 로 변경하려면 다음과 같이합니다.

 ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE bc CHAR (20);

d 라는 새로운 TIMESTAMP 컬럼을 추가하려면 다음과 같이합니다.

 ALTER TABLE t2 ADD d TIMESTAMP;

컬럼 d 에 인덱스를 또한 컬럼 a 에 UNIQUE 인덱스를 추가하려면 다음과 같이합니다.

 ALTER TABLE t2 ADD INDEX (d), ADD UNIQUE (a);

컬럼 c 를 삭제하려면 다음과 같이합니다.

 ALTER TABLE t2 DROP COLUMN c;

c 라는 새로운 AUTO_INCREMENT 정수 컬럼을 추가하려면 다음과 같이합니다.

 ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
   ADD PRIMARY KEY (c);

AUTO_INCREMENT 컬럼에 인덱스를 설정해야하기 때문에 c 에 ( PRIMARY KEY 로) 인덱스를 설정하고 또한 프라이 머리 키 컬럼은 NULL 로 할 수 없기 때문에 c 를 NOT NULL 로 선언합니다.

NDB 테이블의 경우 테이블 또는 컬럼에 사용되는 저장 형식을 변경할 수 있습니다. 예를 들어, 다음과 같이 생성 된 NDB 테이블을 생각해 보겠습니다.

 mysql> CREATE TABLE t1 (c1 INT) TABLESPACE ts_1 ENGINE NDB;
 Query OK, 0 rows affected (1.27 sec)

이 테이블을 디스크 기반 스토리지로 변환하려면 다음 ALTER TABLE 문을 사용할 수 있습니다.

 mysql> ALTER TABLE t1 TABLESPACE ts_1 STORAGE DISK;
 Query OK, 0 rows affected (2.99 sec)
 Records : 0 Duplicates : 0 Warnings : 0

 mysql> SHOW CREATE TABLE t1\G
 *************************** 1. row ******************** *******
        Table : t1
 Create Table : CREATE TABLE`t1` (
   `c1` int (11) DEFAULT NULL
 ) / *! 50100 TABLESPACE ts_1 STORAG​​E DISK * /
 ENGINE = ndbcluster DEFAULT CHARSET = latin1
 1 row in set (0.01 sec)

테이블을 처음 만들 때 테이블 스페이스가 참조되는 필요는 없지만, 테이블 스페이스는 ALTER TABLE 의해 참조 될 필요가 있습니다.

 mysql> CREATE TABLE t2 (c1 INT) ts_1 ENGINE NDB;
 Query OK, 0 rows affected (1.00 sec)

 mysql> ALTER TABLE t2 STORAGE DISK;
 ERROR 1005 (HY000) : Can not create table 'c # sql-1750_3'(errno : 140)
 mysql> ALTER TABLE t2 TABLESPACE ts_1 STORAGE DISK;
 Query OK, 0 rows affected (3.42 sec)
 Records : 0 Duplicates : 0 Warnings : 0
 mysql> SHOW CREATE TABLE t2\G
 *************************** 1. row ******************** *******
        Table : t1
 Create Table : CREATE TABLE`t2` (
   `c1` int (11) DEFAULT NULL
 ) / *! 50100 TABLESPACE ts_1 STORAG​​E DISK * /
 ENGINE = ndbcluster DEFAULT CHARSET = latin1
 1 row in set (0.01 sec)

각 컬럼의 저장 유형을 변경하려면 ALTER TABLE ... MODIFY [COLUMN] 를 사용할 수 있습니다. 예를 들어, 다음의 CREATE TABLE 문을 사용하여 2 개의 컬럼을 포함 MySQL Cluster 디스크 데이터 테이블을 만들려고합니다.

 mysql> CREATE TABLE t3 (c1 INT, c2 INT)
     -> TABLESPACE ts_1 STORAGE DISK ENGINE NDB;
 Query OK, 0 rows affected (1.34 sec)

컬럼 c2 를 디스크 기반의 스토리지에서 인 메모리 스토리지로 변경하려면 다음과 같이 ALTER TABLE 문에서 사용되는 열 정의에 STORAGE MEMORY 절을 포함합니다.

 mysql> ALTER TABLE t3 MODIFY c2 INT STORAGE MEMORY;
 Query OK, 0 rows affected (3.14 sec)
 Records : 0 Duplicates : 0 Warnings : 0

같은 방법으로 STORAGE DISK 를 사용하여 인 메모리 컬럼을 디스크 기반의 컬럼 할 수 있습니다.

컬럼 c1 은 디스크 기반 스토리지를 사용합니다. 이것이 ( CREATE TABLE 문에서 테이블 수준 STORAGE DISK 절에 의해 결정되는) 테이블의 기본이기 때문입니다. 그러나 다음 SHOW CREATE TABLE 의 출력에 같이 컬럼 c2 는 인 메모리 스토리지를 사용합니다.

 mysql> SHOW CREATE TABLE t3\G
 *************************** 1. row ******************** *******
        Table : t3
 Create Table : CREATE TABLE`t3` (
   `c1` int (11) DEFAULT NULL,
   `c2` int (11) / *! 50120 STORAG​​E MEMORY * / DEFAULT NULL
 ) / *! 50100 TABLESPACE ts_1 STORAG​​E DISK * / ENGINE = ndbcluster DEFAULT CHARSET = latin1
 1 row in set (0.02 sec)

AUTO_INCREMENT 컬럼을 추가하면 컬럼 값에 자동으로 일련 번호가 입력됩니다. MyISAM 테이블의 경우 ALTER TABLE 의 전에 SET INSERT_ID= value 를 실행하거나 AUTO_INCREMENT= value 테이블 옵션을 사용하여 첫 번째 시퀀스 번호를 설정할 수 있습니다. 섹션 5.1 "서버 시스템 변수" 를 참조하십시오.

MyISAM 테이블에서 AUTO_INCREMENT 컬럼을 변경하지 않는 경우, 시퀀스 번호는 영향을받지 않습니다. AUTO_INCREMENT 컬럼을 제거하고 다른 AUTO_INCREMENT 컬럼을 추가하면 시퀀스 번호는 1부터 다시 지정됩니다.

복제가 사용되는 경우, 테이블에 AUTO_INCREMENT 컬럼을 추가하면 슬레이브와 마스터 행의 순서가 동일하지 않을 수 있습니다. 이것이 발생하는 것은 행이 번호 매기기 순서가 테이블에 사용되는 고유의 스토리지 엔진 및 행이 삽입 된 순서에 의존하기 때문입니다. 마스터와 슬레이브로 같은 순서를 가지는 것이 중요하다 경우 행을 정렬 한 AUTO_INCREMENT 번호를 할당해야합니다. 테이블 t1 에 AUTO_INCREMENT 컬럼을 추가한다고 가정하면 다음 명령문은 t1 과 동일하지만, AUTO_INCREMENT 컬럼을 포함하는 새 테이블 t2 을 생성합니다.

 CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY)
 SELECT * FROM t1 ORDER BY col1, col2;

여기에서는 테이블 t1 에 열 col1 과 col2 가 존재하는 것을 전제로하고 있습니다.

이 일련의 명령문은 또한 t1 과 동일하지만, AUTO_INCREMENT 컬럼이 추가 된 새 테이블 t2 도 생성됩니다.

 CREATE TABLE t2 LIKE t1;
 ALTER TABLE t2 ADD id INT AUTO_INCREMENT PRIMARY KEY;
 INSERT INTO t2 SELECT * FROM t1 ORDER BY col1, col2;
중요

마스터와 슬레이브로 순서가 동일 함을 보증하려면 ORDER BY 절에서 t1 의 모든 컬럼을 참조해야합니다.

AUTO_INCREMENT 컬럼을 가진 복사본을 만들고 채우는 데 사용하는 방법에 관계없이 마지막 단계는 원래 테이블을 삭제하고 복사본의 이름을 변경하는 것입니다.

 DROP TABLE t1;
 ALTER TABLE t2 RENAME t1;


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved