【问题标题】:MYSQL Change Enum ValuesMYSQL 更改枚举值
【发布时间】:2018-10-31 07:28:33
【问题描述】:

在我的名为“盘点”的表中,有一个来自 ENUM 类型的列,称为“状态”。 “状态”具有以下字段:

  • '待定'
  • '处理中'
  • '失败'
  • '成功'

我想将值更改为:

  • '准备搬迁'
  • '搜索货架位置'
  • '库存更新成功'
  • '库存更新失败'
  • '更新库存'

我尝试了以下命令:

ALTER TABLE `stocktakings` MODIFY `stocktakings.status` 
    `stocktakings.status` ENUM(
        `ready_for_relocation`,
        `search_shelf_location`,
        `stock_update_succeeded`,
        `stock_update_failed`,
        `updating_stock`
);

没用。有什么想法吗?

【问题讨论】:

标签: mysql laravel mysql-error-1064


【解决方案1】:

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

向现有列定义添加新枚举值。此外,枚举值用单引号(不是反引号)括起来

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-05
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多