2013-05-30 2 views
3

У меня есть стол с ENUM в нем, содержащий 3 значения: one, two, three. В таблице уже содержатся данные, но ENUM Значение two не используется в настоящий момент, поэтому я хочу удалить его из ENUM. Результатом будет ENUM с двумя значениями: one, three.Как удалить значение из перечисления в mysql?

Могу ли я просто использовать ALTER TABLE заявление и сказать, как:

ALTER TABLE 'tablename' CHANGE 'enumname' ENUM('one', 'three'); 
+0

Ваша попытка в порядке, но требуется небольшое изменение, попробуйте ответить. –

ответ

2

Попробуйте это: -

alter table tablename 
change `columname` `columname` enum ('one', 'three'); 

Сво работает нормально.

0

Да, вы можете. Попробуйте это на кулаке тестовой среды, потому что это может занять некоторое время для больших столов?

3

Перечисления сохраняются в виде целых чисел, так что все ваши строки с enum="one" фактически равна 1, enum="two" является 2 и enum="tree" является 3.

Кажется MySQL делает всю магию, чтобы изменить эти значения, если имена перечислений совпадают, так что вы просто должны убедиться, что нет строки с «два»

http://sqlfiddle.com/#!2/ef76d/1

CREATE TABLE `tablename` (`name` VARCHAR(32), `enumname` ENUM('one', 'two', 'three')); 
INSERT INTO `tablename` VALUES ('one', 'one'),('two', 'two'),('three', 'three'); 
DELETE FROM `tablename` WHERE `enumname`=2; 
ALTER TABLE `tablename` MODIFY `enumname` ENUM('one', 'three'); 
1

Да, вы можете сделать что. Вот пример:

ALTER TABLE `database`.`tablename` 
CHANGE `enumname` `enumname` ENUM('one','two') 
CHARSET utf8 COLLATE utf8_general_ci NULL; 
Смежные вопросы