MYSQL Изменить значения Enum - PullRequest
0 голосов
/ 31 октября 2018

В моей таблице с именем "stocktakings" есть столбец типа ENUM с именем "status". «status» имеет следующие поля:

  • 'До'
  • 'Обработка'
  • 'Failed'
  • 'Преемник'

Я хочу изменить значения на:

  • 'готов к переезду'
  • 'расположение полки поиска'
  • 'обновление прошло успешно'
  • сбой обновления запасов '
  • «Обновление акций»

Я попробовал следующую команду:

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

Не сработало. Есть идеи?

1 Ответ

0 голосов
/ 31 октября 2018

Вы не можете просто удалить старые значения Enum из определения Column. В противном случае произойдет непоправимая потеря данных (все поля могут стать пустыми). Это будет многоэтапный процесс:

Добавление новых значений Enum в определение существующего столбца. Кроме того, значения 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'
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...