Alter Table은?

테이블에 새로운 컬럼을 추가하거나 삭제하는등의 작업을 하기 위해 필요한 MySQL의 Alter Table 문법입니다.


 

Syntax

ALTER [IGNORE] TABLE tbl_name
   alter_specification[, alter_specification] ...

alter_specification:
   table_option... | ADD [COLUMN] col_namecolumn_definition
       [FIRST | AFTER col_name]
  | ADD [COLUMN] (col_namecolumn_definition,...)
  | ADD {INDEX|KEY} [index_name]
       [index_type] (index_col_name,...) [index_type]
  | ADD [CONSTRAINT [symbol]] PRIMARY KEY
       [index_type] (index_col_name,...) [index_type]
  | ADD [CONSTRAINT [symbol]]
       UNIQUE [INDEX|KEY] [index_name]
       [index_type] (index_col_name,...) [index_type]
  | ADD [FULLTEXT|SPATIAL] [INDEX|KEY] [index_name]
       (index_col_name,...) [index_type]
  | 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_namenew_col_namecolumn_definition
       [FIRST|AFTER col_name]
  | MODIFY [COLUMN] col_namecolumn_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}

사용 예(Example)

1. 테이블에 새로운 컬럼 추가

alter table tablename add column [추가할 컬럼명] [추가할 컬럼 데이타형]

2. 테이블에 컬럼타입 변경하기

alter table tablename modify column [변경할 컬럼명] [변경할 컬럼 타입]

3. 테이블에 컬럼이름 변경하기

alter table tablename change column [기존 컬럼명] [변경할 컬럼명] [변경할 컬럼타입]

4. 테이블에 컬럼 삭제하기

alter table tablenamedrop column [삭제할 컬럼명]

5. 테이블컬럼에 인덱스 주기

alter table tablenameadd index 인덱스명(인덱스를 줄 컬럼1 , 인덱스를 줄 컬럼2, ... )

6. 테이블컬럼에 인덱스 삭제하기

alter table tablenamedrop index 인덱스명;

7. 테이블에 Primary Key 만들기

alter table tablenameadd primary key (키를 줄 컬럼명1 , 키를 줄 컬럼명2, ...)

8. 테이블에 Primary Key 삭제하기

alter table tablenamedrop primary key;

9. 테이블명 바꾸기

alter table 기존테이블명 rename 새로운테이블명

10. 인덱스 생성

CREATE [UNIQUE] INDEX index_name ON tbl_name (col_name[(length]),... )

11. 인덱스 삭제

DROP INDEX index_name

Comment

 

안녕하세요. 신규로 4.1.7버전의 MySQL 를 설치했는데 character set 의 변경이 잘 되지 않아서 질문 올립니다.
아래에 버전 및 시도해본 방법을 적었습니다. 함 확인해보시고요 해결책 알려주시면 감사하겠습니다~

 

0. 버전
버전 : 4.1.7, source compile 해서 설치 (my.cnf 에서 수정하려고 configure 할때 character set 설정 하지 않았습니다.)

 

1. 현재 character 정보
mysql> show variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+

 

2. 변경하려고 시도해본 방법
1) my.cnf 변경
[mysqld] 아래에
default-character-set=euckr
를 추가하고 mysql을 재시작하면 에러가 납니다.
/mysql/var/***.err 에서 에러를 확인하면 아래와 같습니다.

/usr/local/mysql/libexec/mysqld: Character set 'euckr' is not a compiled character set and is not specified in the '/usr/local/mysql/share/mysql/charsets/Index.xml' file

 

"Character set 'euckr' is not a compiled character set" 이라면 compile할때 euckr 이 빠졌다는 것인가요?

'/usr/local/mysql/share/mysql/charsets/Index.xml' file 에는 euckr 항목이 있습니다.


Korean
EUC-KR Korean
euc_kr
euc-kr

primary
compiled


binary
compiled


2) database의 character set을 직접 변경
mysql> ALTER DATABASE tv DEFAULT CHARACTER SET euckr;
ERROR 1115 (42000): Unknown character set: 'euckr'

 

3) 지원하는 character set 확인
설치한 mysql 서버에서 지원하는 character set을 확인해 보았습니다만 euckr 이 없네요.


mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
+----------+-----------------------------+---------------------+--------+

 

1)의 에러메시지에서 처럼 euckr character set 이 compile 되지 않았다는 것 같은데요,

그럼 어떻게 추가할수 있을까요.

 
 

이 글에 대한 댓글이 총 4건 있습니다.
안녕하세여

보니까 euckr 이 아니고 euc_kr 아닌가요 ?

euc_kr 로 한번 해보세여

윤명식(jazzlian)님이 2004-12-07 11:11:03에 작성한 댓글입니다.
정상적(?)으로 euckr을 지원하는 서버에서 확인해보면

mysql> show character set;
...

| euckr | EUC-KR Korean | euckr_korean_ci | 2 |

...

로 나옵니다.

버전에 따라 다른건가요? 제가 설치한것은 4.1.x 입니다.

오세영(osy530)님이 2004-12-07 11:48:48에 작성한 댓글입니다.
4.1에서는 euc_kr이 euckr로 변경되었습니다

오세윤님이 2004-12-07 13:43:22에 작성한 댓글입니다. Edit X
별다른 해결책이 없는거 같아 새로 설치했습니다. ^^;;

configure 할때 characterset 옵션 주고 하니 잘 되네요.

 

참고로 한가지. 4.1 버전에서는 jdbc 설정도 변경해줘야 합니다.

이전버전에서 jdbc 설정했던 characterEncoding=EUC-KR로 하면 아래와 같은 에러가 납니다.

characterEncoding=euckr 로 하세요~

 

General error,  message from server: "Illegal mix of collations (euckr_korean_ci
,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='"

 

 

오세영(osy530)님이 2004-12-07 18:06:06에 작성한 댓글입니다.
이 댓글은 2004-12-07 18:06:26에 마지막으로 수정되었습니다.

database의 mysql 에서 한글 쿼리값을 넣는데 인코딩 문제로 찾아보았는데 위와 같은 글이 무지 많았다. 아니.. 위와 같은 글밖에 못찾은거 같다 -_-..

 

나의 서치 목적 : mysql 상에서 utf-8로 인코딩된것을 euckr로 바꾸는 것 !!

 

하지만 show character set; 의 쿼리값을 넘겼을때 utf8은 있으나 euckr은 없었다.. (4.x대 이후인가.. 부터 euc-kr에서 euckr로 이름이 변경되었다고한다.)

그래서 선배들에게 mysql에 euckr 를 설치하는방법을 물어보았다. 현재 N회사 서버관리쪽에서 일하시는 선배님 말씀에 의하면 강제로 1번과 같이 my.cnf 파일에 들어가 server client mysqld 세부분에 euckr 를 추가시키는 방법이였다. 헌데 이 방법은 버츄얼 호스트를 사용해 여러 사람들에게 호스팅해주는 서버에선 함부러 바꿨다가 여러사람이 피해를 볼수있어 힘들다.

또 한가지 방법은 mysql 에 있는 테이블을 다 덤프뜬 다음에 mysql를 재설치하라는 방법이였다.. 허거덩..-_- 너무 힘들어..

 

그래서 내가 낸 해결책..... 지금까지 만든 페이지가 몇백장 되지 않으니... 그냥 다 utf-8로 인코딩하고 html에서 meta로 utf-8을 넣어주는것...

내 선에선 가장 쉬운 해결방안같다... -_-... 머리가 나쁘면 몸이 고생하겠즤...

Comment

$query 로 쿼리값이 전송되지 않을때..

 

임시방책으로 다음과 같이 쓴다

$query = $_GET['query'];

$query = $_POST['query'];

 

php 5.x 이후로부터 바꼈다는데...

 

메뉴얼을 읽어서 정확히 알아봐야겠따...

 

정확히 이유는 찾아서 정리할 예정..

'STUDY > DatabBase' 카테고리의 다른 글

MySQL ALTER TABLE 문법  (0) 2013.04.18
mysql character set (utf8 euckr) 변경  (0) 2013.04.18
[mysql] $query로 쿼리값이 전송되지 않을때  (0) 2013.04.18
mysql update 구문 쿼리  (0) 2013.04.18
desc , select 사용법  (0) 2010.03.29
[mysql] DB table, database 생성 및 삭제  (0) 2010.01.07

Comment



티스토리 툴바