在我的名为"stocktakings"的表中,有一列来自ENUM类型,名为"status"。"状态"包含以下字段:
- "结束">
- '正在处理'
- "失败">
- '成功'
我想将值更改为:
- "准备搬迁">
- '搜索货架位置'
- '库存更新成功'
- '库存更新失败'
- '更新库存'
我尝试了以下命令:
ALTER TABLE `stocktakings` MODIFY `stocktakings.status`
`stocktakings.status` ENUM(
`ready_for_relocation`,
`search_shelf_location`,
`stock_update_succeeded`,
`stock_update_failed`,
`updating_stock`
);
没用。有什么想法吗?
不能仅从列定义中删除旧枚举值。否则,将出现无法修复的数据丢失(所有字段可能变为空白(。这将是一个多步骤的过程:
将新的枚举值添加到现有列定义中。此外,枚举值由单引号(而非反引号(包围
ALTER TABLE `stocktakings` MODIFY `stocktakings`.`status` ENUM(
'Pending',
'Processing',
'Failed',
'Succeeded',
'ready_for_relocation',
'search_shelf_location',
'stock_update_succeeded',
'stock_update_failed',
'updating_stock'
);
现在,运行Update
查询以相应地更新所有枚举值:
UPDATE `stocktakings`
SET status = CASE status
WHEN 'Pending' THEN 'ready_for_relocation'
WHEN 'Processing' THEN 'search_shelf_location'
WHEN 'Failed' THEN 'stock_update_failed'
WHEN 'Succeeded' THEN 'stock_update_succeeded'
END
现在,Alter Table
并删除旧枚举值。
ALTER TABLE `stocktakings` MODIFY `stocktakings`.`status` ENUM(
'ready_for_relocation',
'search_shelf_location',
'stock_update_succeeded',
'stock_update_failed',
'updating_stock'
);