mysql更改枚举值

aelbi1ox  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(434)

在我的名为“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`
);

没用。有什么想法吗?

5f0d552i

5f0d552i1#

不能只从列定义中删除旧的枚举值。否则,将出现无法修复的数据丢失(所有字段都可能变为空白)。这将是一个多步骤的过程:
向现有列定义添加新枚举值。此外,枚举值用单引号括起来(不是反引号)

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'
    );

相关问题