음머어's 까망별

블로그 이미지
무지 인간의 첫 걸음..
by 까망별 음머어
  • 303,486Total hit
  • 137Today hit
  • 147Yesterday hit

'Mysql 테이블 필드 추가'에 해당되는 글 1건

  1. 2008.11.17
    [MySQL] FIRST, AFTER, LAST

당신은... 개발 테스트를 위해,
테이블을 생성하고, 데이터를 때려 붓고.......

그러다, '아! 필드 하나 추가하자!' 할 때가 있지 않은가?

그리고, '아! 이러면 테이블의 맨 밑에 새로운 필드가 붙을텐데.... 원래 중간에 있어야 하는데.. ' 라고 하며,
데이타까지 그득하게 있는 테이블을 눈물을 머금고,
DROP하고 다시 CREATE 문을 실행 시킨적은 없는가?

..... 난 있는데 -___-;;;

자.. 그럴 경우를 위해 FIRST, AFTER, LAST  3종 세트가 있다.

결론부터 말하자면, FIRST, AFTER, LAST 는
ALTER TABLE을 이용하여 필드의 추가 / 위치 조정시 사용하는 예약어이다.


[HELP ALTER TABLE]
********************************************************************************************
mysql> help alter table;
Name: 'ALTER TABLE'
Description:
Syntax:
ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...

alter_specification:
    table_option ...
  | ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
  | ADD [COLUMN] (col_name column_definition,...)
  | ADD {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        PRIMARY KEY [index_type] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...)
  | ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (index_col_name,...)
  | ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        reference_definition
  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
  | CHANGE [COLUMN] old_col_name new_col_name column_definition
        [FIRST|AFTER col_name]
  | MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
  | DROP [COLUMN] col_name
  | DROP PRIMARY KEY
  | DROP {INDEX|KEY} index_name
  | DROP FOREIGN KEY fk_symbol
  | DISABLE KEYS
  | ENABLE KEYS
  | RENAME [TO] new_tbl_name
  | ORDER BY col_name [, col_name] ...
  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
  | [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
  | DISCARD TABLESPACE
  | IMPORT TABLESPACE

index_col_name:
    col_name [(length)] [ASC | DESC]

index_type:
    USING {BTREE | HASH | RTREE}

ALTER TABLE enables you to change the structure of an existing table.
For example, you can add or delete columns, create or destroy indexes,
change the type of existing columns, or rename columns or the table
itself. You can also change the comment for the table and type of the
table.

URL: http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
********************************************************************************************

[사용 방법]
위의 HELP 결과중, 금색으로 칠해져 있는 부분을 보면,
ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

를 볼 수 있을 것이다.

즉,
ALTER TABLE ADD col2 varchar(12) FIRST;        # 테이블의 가장 윗줄에 col2 를 추가하겠다.
ALTER TABLE ADD col2 varchar(12) AFTER col1; # col1 이후에 col2를 추가하겠다.
ALTER TABLE ADD col2 varchar(12) LAST;         # 가장 아랫줄에 col2를 추가하겠다. (DEFAULT)
이고,

마찬가지로
ALTER TABLE MODIFY col2 varchar(12) FIRST;   # 테이블의 가장 윗줄에 col2 를 이동하겠다.
ALTER TABLE MODIFY col2 varchar(12) AFTER col1;   # col1 이후에 col2를 이동하겠다.
ALTER TABLE MODIFY col2 varchar(12) LAST;           # 가장 아랫줄에 col2를 이동하겠다.

와 같이 사용할 수 있다는 이야기이다.


[사담]
개인적으로는,
우리가 그리는 모델링 된 모습과 동일하게 구성하고,
인간이 인지하기 편하게 만들고자 하는 것이 큰 이득이라고 생각한다.

다시 말해서 데이터를 입력할 때 발생할 수 있는,
개념적 시각에 의한 차이로 인해 발생할 수 있는 오류를 없엘 수 있다는 의미가 아닐까 라는 생각이다.

가령,
CREATE TABLE test (
              id int,
              col2 varchar(12)
);
라고 생성된 테이블에

ALTER TABLE ADD col1 varchar(12);
라고 입력하면,

test에는 id, col2, col1 순으로 필드를 갖게 된다.

만약, test의 필드를 적지 않고, 단순히
INSERT INTO test VALUES( 1, 'col1 str', 'col2 str');
라고 입력한다면,

col2 에는 'col1 str' 이 col1 에는 'col2 str'이 들어가게 되므로,
직관적이지 못하다.

그러므로,
ALTER TABLE ADD col1 varchar(12) AFTER id;
라고 하는 것이,

글의 시작에서도 말했듯이 테이블 DROP을 발생시키지 않고,
깔끔하게 처리할 수 있는 방법이 아닐까 한다.











저작자 표시 비영리
신고
TRACKBACK 0 AND COMMENT 0

ARTICLE CATEGORY

모든 이야기 (77)
독백 (22)
MySQL (25)
Oracle (7)
영화 (6)
Linux (3)
DW(Data Warehouse) (0)
(7)
음악 (1)
Python (3)
Postgresql (2)

ARCHIVE