-
ENUMの値のセットを変更するには、
ALTER TABLE
が必要です。 これにより、テーブルの再構築が発生する可能性があります-非常にコストのかかる操作です(ENUM定義の最後に新しい値を1つ追加するだけではテーブルの再構築は行われませんが、1つを削除するか、順序を変更すると、テーブルが実行されます再構築)。一方、ルックアップテーブルの値のセットの変更は、INSERTまたはDELETEと同じくらい簡単です。 -
他の属性をENUMの値に関連付ける方法はありません。たとえば、どの属性が廃止され、どの属性がユーザーインターフェイスのドロップダウンリストに配置される資格があるかなどです。ただし、ルックアップテーブルには、そのような属性の追加の列を含めることができます。
-
個別の値のリストを取得するためにENUMを照会することは非常に困難であり、基本的に
INFORMATION_SCHEMA
からデータ型定義を照会する必要があります。 、および返されたBLOBからリストを解析します。SELECT DISTINCT status
を試すことができます テーブルから取得しますが、現在使用中のステータス値のみを取得します。これは、ENUMのすべての値ではない可能性があります。ただし、ルックアップテーブルに値を保持すると、クエリや並べ替えなどが簡単になります。
お分かりのように、私はENUMの大ファンではありません。 :-)
同じことが、列を固定値のセットと単純に比較するCHECK制約にも当てはまります。 MySQLはとにかくCHECK制約をサポートしていませんが。
更新:MySQL8.0.16は