我有一个名为action
的枚举列表。目前允许的值是:
act1,act2,act3,act4
。我希望删除act3
和act4
,并且我的表的当前状态不包含act3
或act4
的所有行。
当我尝试使用新的值集修改列时,它会抛出错误
Data Truncated for column action
。
请建议如何删除所需的值。
答案 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' );
没有必要丢弃你的桌子或丢弃你的领域。但您需要删除或更新具有您要删除的值的所有数据。