2011-09-22 6 views
15

ENUM 값이 표시된 모든 행에서 ENUM 값을 변경할 수 있는지 궁금합니다. 변경된 값은 다음과 같습니다. 잘.테이블 전체에서 MySQL ENUM 값의 값 변경

+0

업데이트 문을 사용 하시겠습니까? 'UPDATE table1 SET enum1 = 'male'어디 enum1 = 'female'' – Johan

+1

@Johan - 그리고 아무런 문제가 발생하지 않을까요? 나는 'ENUM'값 자체를 변경하기 위해 'ALTER'를 사용하기 전에해야 할 것이라고 생각합니다. 그러나 허용 될 수 있습니까? 내가 지정한 값만 열거 형 열에서 선택할 수 있다고 생각하기 때문에 궁금하네요? 그리고 새로운 값이 아직 지정되지 않았다면 ... – stefmikhail

+2

먼저 변경을하고 나서 update를하면,'create table' /'alter table' 문에서 설정되지 않은 값으로 enum을 설정할 수 없습니다. – Johan

답변

25

당신은 열거의 값을 변경하려면 :

ENUM('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese') 

그 사용을 변경하려면 : 이전 열거했다 가정

-- Add a new enum value 
ALTER TABLE `tablename` CHANGE `fieldname` `fieldname` ENUM 
('English', 'Spanish', 'Frenchdghgshd', 'Chinese', 'German', 'Japanese', 'French'); 
-- Update the table to change all the values around. 
UPDATE tablename SET fieldname = 'French' WHERE fieldname = 'Frenchdghgshd'; 
-- Remove the wrong enum from the definition 
ALTER TABLE `tablename` CHANGE `fieldname` `fieldname` ENUM 
('English', 'Spanish', 'Chinese', 'German', 'Japanese', 'French'); 
MySQL은 아마 거치게됩니다

귀하의 테이블에 행을 업데이 트하는 동안, 나는 그 주위에 계획된 최적화의 이야기를 들었지만, 나는 그것이 실제로 일어 났는지 확신하지 못합니다.

+0

그러면 MySQL이 자동으로 데이터베이스를 거쳐 필요한 부분을 변경한다고 생각합니까? 나는 또 다른 방법으로 ALTER를 사용하여 새로운 ENUM 값을 세트에 추가 한 다음, UPDATE를 사용하여 이전 값의 테이블에있는 모든 인스턴스를 새로운 값으로 대체하는 방법을 생각했다. 마지막으로'ALTER'을 사용하여 이전의'ENUM' 값을 삭제하십시오. 그게 효과가 있다고 생각하니? – stefmikhail

+0

enum은 열거 형의 값을 보유 할 가장 작은 정수 (보통 tinyint)를 필드에 실제로 저장하지 않습니다. 열거 형 mysql에서 문자열을 변경하면 종종 – Johan

+0

행에 아무 것도하지 않아도되므로 정수를 통해 연결됩니다. – stefmikhail

관련 문제