从mysql列中删除枚举值

时间:2012-09-26 08:05:26

标签: mysql enums alter

我有一个名为action的枚举列表。目前允许的值是: act1,act2,act3,act4。我希望删除act3act4,并且我的表的当前状态不包含act3act4的所有行。

当我尝试使用新的值集修改列时,它会抛出错误 Data Truncated for column action

请建议如何删除所需的值。

2 个答案:

答案 0 :(得分:10)

使用ALTER TABLE添加枚举值是可以的,并在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  |
+------+-----+

答案 1 :(得分:2)

首先运行查询。

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

之后运行此查询。

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

没有必要丢弃你的桌子或丢弃你的领域。但您需要删除或更新具有您要删除的值的所有数据。