MYSQL 更改枚举值

MYSQL Change Enum Values

在我名为 "stocktakings" 的 table 中,有一个名为 "status" 的 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'
    );