65

タイプcontentがの列を持つMySQLテーブル" "があります。値は&です。に置き換える必要があります:page_typeENUMENUMNEWSPRESS_RELEASENEWSFEATURED_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ます。

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

4

4 に答える 4

131

私があなたの質問を理解した場合、あなたは既存の列挙値の名前をに変更したいと思い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;
    
于 2013-03-26T16:56:05.773 に答える
7

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

更新前にすべての空の値が「NEWS」であったとすると、次のように変更できます。

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
于 2013-03-26T16:55:18.070 に答える
2

デフォルトが役に立ったと思います。

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

今、あなたは盲目的に更新する必要があります

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

于 2013-03-26T16:57:39.903 に答える
2

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

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

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
于 2013-03-26T16:57:58.233 に答える