테이블에 컬럼을 새롭게 추가하면 생성된 컬럼은 테이블의 맨 마지막 부분에 위치합니다. 추가적으로 등록한 컬럼 순서는 데이터를 해석하는 데 가독성이 불편할 수 있습니다. 이 런 경우 쿼리 마지막에 위치를 결정하는 키워드를 추가하여 순서를 변경할 수 있습니다. 또는 생성 시 자리를 지정할 수 있습니다.

08.2.1 위치 변경

이미 생성된 컬럼의 위치를 변경할 때는 MODIFY 키워드를 이용합니다. 또한 ALTER 쿼 리의 마지막에 위치를 정의합니다.

| 쿼리 문법 |

ALTER TABLE 테이블명 MODIFY 컬럼명 자료형 after 컬럼 위치; 

그럼 컬럼의 위치 변경 실습을 하겠습니다. 다음과 같이 desc 명령을 통하여 members 테이블의 구조를 확인합니다.

| 콘솔 실습 화면 |

mysql> desc members;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| Id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| LastName  | varchar(255) | YES  |     | NULL    |                |
| FirstName | varchar(255) | YES  |     | NULL    |                |
| Address   | varchar(255) | YES  |     | NULL    |                |
| City      | varchar(255) | YES  |     | NULL    |                |
| Country   | varchar(255) | YES  |     | NULL    |                |
| age       | varchar(10)  | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
7 rows in set (0.02 sec)

새롭게 추가한 컬럼 (age)이 제일 마지막에 위치해 있습니다. age 컬럼을 FirstName 컬럼명 다음으로 이동해 봅니다.

| 예제 쿼리 |

ALTER TABLE members MODIFY COLUMN age varchar(10) after FirstName; 

| 콘솔 실습 화면 |

mysql> ALTER TABLE members MODIFY COLUMN age varchar(10) after FirstName;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

쿼리 명령이 정상적으로 잘 수행되었습니다. 다시 한번 desc 쿼리 명령을 통하여 members 테이블의 구조를 확인해 봅니다.

| 콘솔 실습 화면 |

mysql> desc members;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| Id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| LastName  | varchar(255) | YES  |     | NULL    |                |
| FirstName | varchar(255) | YES  |     | NULL    |                |
| age       | varchar(10)  | YES  |     | NULL    |                |
| Address   | varchar(255) | YES  |     | NULL    |                |
| City      | varchar(255) | YES  |     | NULL    |                |
| Country   | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
7 rows in set (0.02 sec)

위의 콘솔 결과를 보면 컬럼 age의 위치가 컬럼 FirstName 뒤로 변경된 것을 확인할 수 있습니다. 컬럼의 위치를 변경할 때는 after 키워드 뒤에 위치할 다른 컬럼명을 지정하면 됩니다.

만일 컬럼명을 제일 처음으로 변경할 때는 ‘after 컬럼명’ 대신에 FIRST 키워드로 사용하면 됩니다.

| 예제 쿼리 |

ALTER TABLE members MODIFY COLUMN age varchar(10) first; 

| 콘솔 실습 화면 |

mysql> ALTER TABLE members MODIFY COLUMN age varchar(10) first;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc members;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| age       | varchar(10)  | YES  |     | NULL    |                |
| Id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| LastName  | varchar(255) | YES  |     | NULL    |                |
| FirstName | varchar(255) | YES  |     | NULL    |                |
| Address   | varchar(255) | YES  |     | NULL    |                |
| City      | varchar(255) | YES  |     | NULL    |                |
| Country   | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
7 rows in set (0.02 sec)

컬럼 age가 처음으로 이동되었습니다.

08.2.2 PHP 실습

PHP 코드를 통하여 컬럼의 위치를 변경하는 메서드를 작성해서 처리하도록 하겠습니다.

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// 컬럼 데이터 타입을 수정합니다.
public function tableFieldModify($tbname, $field, $datatype, $pos)
{
            if ($tbname) {
                $queryString = "ALTER TABLE $tbname MODIFY $field $datatype";
                if ($pos) {
                    if($pos == "first") $queryString .= " first"; 
                    else $queryString .= " after $pos";
                }
                
                // 쿼리를 전송합니다.
                if (mysqli_query($this->dbcon, $queryString)=== TRUE) {
                    $this->msgEcho("쿼리성공] ".$queryString);
                    $this->msgEcho(" 컬럼변경!");

                    // 객체 반환, 매서드체인
                    return $this; 

                } else {
                    $this->msgEcho("Error] ".$queryString);
                }

            } else {
               $this->msgEcho("Error] 테이블 이름이 없습니다."); 
            }    
}

예제 파일 | alter-02.php

<?php
 
	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();
 
	$tbname = "members";
	$field = "address2";
	$datatype = "varchar(255)";
    
	// 필드를 추가합니다.
	$db->tableFieldModify($tbname, $field, $datatype, "address");
 
?>
 

화면 출력

mysql connected!
쿼리성공] ALTER TABLE members MODIFY address2 varchar(255) after Address
컬럼변경()!

08.2.3 생성 위치

기존 생성된 테이블의 컬럼을 수정해 보았습니다. 또는 새로운 컬럼을 추가할 때도 컬럼의 위치를 지정하여 등록할 수 있습니다. 컬럼의 위치를 결정하는 FIRST나 alter 컬럼명 은 컬럼을 추가하는 ADD 키워드와 함께 사용 가능합니다.

| 쿼리 문법 |

ALTER TABLE 테이블명 ADD 컬럼명 자료형 after 컬럼 위치; 

새로운 컬럼을 추가해 보도록 합니다. 컬럼을 추가할 때 위치를 같이 지정하여 추가합니다. 컬럼의 위치를 결정하는 쿼리를 함께 넣으면 나중에 별도로 위치를 변경할 필요가 없습니다. desc 명령을 통하여 테이블의 구조를 확인합니다.

| 콘솔 실습 화면 |

mysql> desc members;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| age       | varchar(10)  | YES  |     | NULL    |                |
| Id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| LastName  | varchar(255) | YES  |     | NULL    |                |
| FirstName | varchar(255) | YES  |     | NULL    |                |
| Address   | varchar(255) | YES  |     | NULL    |                |
| City      | varchar(255) | YES  |     | NULL    |                |
| Country   | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
7 rows in set (0.02 sec)

새로운 컬럼 birth를 추가합니다. birth의 위치는 FirstName 다음에 위치합니다.

| 예제 쿼리 |

alter table members add birth datetime after FirstName; 

| 콘솔 실습 화면 |

mysql> alter table members add birth datetime after FirstName;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

쿼리가 정상적으로 잘 수행되었습니다. 다시 한번 desc 쿼리 명령을 통하여 테이블의 구조를 확인해 봅니다.

| 콘솔 실습 화면 |

mysql> desc members;
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| age       | varchar(10)  | YES  |     | NULL    |                |
| Id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| LastName  | varchar(255) | YES  |     | NULL    |                |
| FirstName | varchar(255) | YES  |     | NULL    |                |
| birth     | datetime     | YES  |     | NULL    |                |
| Address   | varchar(255) | YES  |     | NULL    |                |
| City      | varchar(255) | YES  |     | NULL    |                |
| Country   | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
8 rows in set (0.02 sec)

정상적으로 새롭게 추가한 birth 컬럼이 FirstName 컬럼 다음에 위치하여 생성되었습니다.

08.2.4 PHP 실습

두 번째 위치 컬럼 추가 쿼리를 PHP를 통하여 실습해 봅니다.

예제 파일 | alter-03.php

<?php
 
	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();
 
	$tbname = "members";
	$field = "birth";
	$datatype = "datetime";
    
	// 필드를 추가합니다.
	$db->tableFieldADD($tbname, $field, $datatype,"FirstName");
 
?>

화면 출력

mysql connected!
쿼리성공] ALTER TABLE members ADD birth datetime after FirstName
컬럼추가!