MYSQL 更改枚举值
MYSQL Change Enum Values
在我名为 "stocktakings" 的 table 中,有一个名为 "status" 的 ENUM 类型的列。 "status" 具有以下字段:
- 'Pending'
- 'Processing'
- 'Failed'
- 'Succeeded'
我想将值更改为:
- 'ready for relocation'
- 'search shelf location'
- 'stock update succeeded'
- 'stock update failed'
- 'updating stock'
我尝试了以下命令:
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'
);
在我名为 "stocktakings" 的 table 中,有一个名为 "status" 的 ENUM 类型的列。 "status" 具有以下字段:
- 'Pending'
- 'Processing'
- 'Failed'
- 'Succeeded'
我想将值更改为:
- 'ready for relocation'
- 'search shelf location'
- 'stock update succeeded'
- 'stock update failed'
- 'updating stock'
我尝试了以下命令:
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'
);