MYSQL更改枚举值

Dav*_*uer 4 mysql mysql-error-1064 laravel

在我的名为“ 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`
);
Run Code Online (Sandbox Code Playgroud)

没用 有任何想法吗?

Mad*_*iya 6

您不能仅从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'
);
Run Code Online (Sandbox Code Playgroud)

现在,运行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 
Run Code Online (Sandbox Code Playgroud)

现在,Alter Table删除旧的枚举值。

ALTER TABLE `stocktakings` MODIFY `stocktakings`.`status` ENUM(
            'ready_for_relocation',
            'search_shelf_location',
            'stock_update_succeeded',
            'stock_update_failed',
            'updating_stock'
    );
Run Code Online (Sandbox Code Playgroud)