web-dev-qa-db-ja.com

MySQLは列のENUM値を変更します

タイプcontentの列_page_type_を持つMySQLテーブル "ENUM"があります。 ENUM値はNEWS&_PRESS_RELEASE_です。 NEWSを_FEATURED_COVERAGE_に置き換える必要があります。

_ALTER TABLE `content` CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
_

しかし、今では以前page_type NEWSを持っていたテーブル内のレコードは空になり、どのレコードがNEWSであるかを特定する方法がないため、それらを_FEATURED_COVERAGE_。

そのような問題を解決する方法は?

46
Sangram Anand

あなたの質問を理解したら、既存の列挙値NEWSの名前をFEATURED_COVERAGE。その場合、以下の手順に従う必要があります。

  1. テーブルを変更し、新しい列挙値を列に追加して、3つの列挙を作成します。

    ALTER TABLE `content` CHANGE `pagetype` `pagetype`
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8
    COLLATE utf8_general_ci NOT NULL;
    
  2. すべてのレコードの古い列挙値を新しい値に設定します。

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where
    `pagetype` = 'NEWS';
    
  3. テーブルを変更し、古い列挙値を削除します。

    ALTER TABLE `content` CHANGE `pagetype` `pagetype`
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE
    utf8_general_ci NOT NULL;
    
96

MySQLの列挙型には常に、整数として0、文字列として ''の隠しオプションがあります。無効な値を割り当てようとすると、非表示の値が使用されます。

更新前のすべての空の値が「NEWS」であったと仮定すると、それらを変更できます

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
5
Vatev

デフォルトが助けになったと思う。

ALTER TABLE `content`
CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') 
   CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULt 'FEATURED_COVERAGE';

今、あなたは盲目的にアップデートする必要があります

値セットが変更されている場合は、列挙列を使用しないでください。

2
georgecj11

列挙型を1つだけ変更したので、難しくありません。

これを使ってみてください

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
1
alwaysLearn