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

    没用。有任何想法吗?

    最佳答案

    您不能只从 Column 定义中删除 Old Enum 值。否则,将出现无法修复的数据丢失(所有字段可能变为空白)。这将是一个多步骤的过程:

    向现有列定义添加新的枚举值。此外,枚举值被单引号包围(不是反引号)

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

    关于MYSQL 更改枚举值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53078318/

    10-10 17:40