4

我有一个表,ENUM其中包含 3 个值:one, two, three. 该表已包含数据,但目前未使用ENUM值,因此我想将其从. 结果将是一个只有 2 个值的:, .twoENUMENUMonethree

我可以只使用一个ALTER TABLE声明并说:

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

4 回答 4

3

枚举保存为整数,因此您的所有行enum="one"实际上都等于1enum="two"is2enum="tree"is 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');
于 2013-05-30T07:06:03.557 回答
3

尝试这个 :-

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

它工作正常。

于 2013-05-30T07:14:28.300 回答
1

是的,你可以这么做。这是一个例子:

ALTER TABLE `database`.`tablename`
CHANGE `enumname` `enumname` ENUM('one','two')
CHARSET utf8 COLLATE utf8_general_ci NULL;
于 2013-05-30T07:07:23.673 回答
0

是的你可以。在您的测试环境拳头上尝试一下,因为大表可能需要一段时间?

于 2013-05-30T07:04:26.347 回答