2012-09-26 2 views
7

action 열거 형 열이있는 테이블이 있습니다. 현재 허용되는 값은 act1,act2,act3,act4입니다. act3act4을 제거하고 테이블의 현재 상태에 act3 또는 act4이있는 행이 필요하지 않습니다.mysql 열에서 열거 형 값을 제거하십시오.

새로운 값으로 열을 수정하려고하면 오류가 발생합니다. Data Truncated for column action.

필요한 값을 제거하는 방법을 제안하십시오.

+0

아마도 열거 형을 사용하지 않았을 수 있습니까? http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/ – fancyPants

+0

CREATE TABLE 및 ALTER TABLE 문을 표시하십시오. –

답변

9

열거 형 값을 추가하는 데 ALTER TABLE을 사용하면 OK30이며 MySQL documentation에 설명되어 있습니다.

그러나 열거 형 값을 제거하는 경우 더 나은 옵션은 변경을 수행 할 새 열을 만드는 것입니다.

ALTER TABLE your_table ADD new_action_column ENUM('act1', 'act2') ... ; 
UPDATE your_table SET new_action_column = action; 
ALTER TABLE your_table DROP action; 
ALTER TABLE your_table CHANGE new_action_column action ENUM('act1', 'act2') ... ; 

편집 그런데

. ENUM을 사용하는 것이 가장 좋은 방법은 아니며 대신 INT을 사용해야합니다.

8 Reasons Why MySQL's ENUM Data Type Is Evil

난 당신이 쿼리를 실행

+------+-----+ 
| ENUM | INT | 
+======+=====+ 
| act1 | 0 | 
+------+-----+ 
| act2 | 1 | 
+------+-----+ 
+0

"대신 INT를 사용해야합니다." - 왜? – Barmar

+0

@Barmar [MySQL의 ENUM 데이터 유형이 왜 나쁜지에 대한 8 가지 이유] (http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/) Tombom은 이미 언급했습니다. 열거 형 값 'act1'과 'act2'및 int 값인 0, 1 사이의 매핑을 사용하는 것이 좋습니다. –

+0

@FlorianParain 기존 열을 변경하지 않고 임시 값을 추가하는 것이 유리한 이유가 궁금합니다. 당신의 진술을 추론 할 수 있습니까? 감사! –

2

먼저 같은 매핑을 사용하는 것이 좋습니다.

UPDATE table_name SET action = '' WHERE action IN ('act3', 'act4'); 

이 쿼리를 실행 한 후에

ALTER TABLE table_name CHANGE action action ENUM('act1', 'act2'); 

테이블을 삭제하거나 입력란을 삭제할 필요가 없습니다. 그러나 제거하려는 값이있는 모든 데이터를 삭제하거나 업데이트해야합니다.

+0

그는 제거 할 값이있는 행이 없다고 말했습니다. – Barmar

+0

테이블에 'act3'및 'act4'행이 포함되어 있지 않으므로 위의 단계를 수행 할 필요가 없습니다. 오류가 계속 발생합니다. – mickeymoon

0

다른 두 가지 답변은 이미 질문에 대해 자세히 다루었지만 여기에 간단한 문제가 있습니다. 은 단순히 ALTER TABLE을 수행하지 못할 수 있습니다. ENUM ('BAR', 'FOO', 'REMOVEME')이 있고 데이터 줄을 따라 뭔가를 말하면서 오류가 발생하면 somethingsomething을 잘라내어 이미 제거하려는 열거 형 멤버로 항목을 설정했을 수 있습니다. 따라서 먼저 다음과 같이해야합니다.

업데이트 할 수있는 테이블 enumrow = 'FOO'where yourenumrow = 'REMOVEME';

이 방법 REMOVEME 지금 FOO되며 테이블이

ALTER 표 yourtable 변경을 사용하여 변경 될 수 있었다 모든 항목 yourenumrow yourenumrow ENUM ('FOO', '바') DEFAULT의 NULL;

관련 문제