logo

MySQL 列挙型

MySQL の ENUM データ型は、 文字列オブジェクト 。これにより、テーブルの作成時に列の仕様で許可される値のリストから選択する値を制限できます。の略です 列挙 これは、各列が指定された可能な値の 1 つを持つことができることを意味します。それは使用しています 数値インデックス (1、2、3…) は文字列値を表します。

MySQL ENUM データ型には次の利点があります。

  • 列に指定可能な値の限られたセットを含めることができるコンパクトなデータ ストレージ。ここでは、文字列値が数値インデックスとして自動的に使用されます。
  • 数値を対応する文字列に再度変換できるため、読み取り可能なクエリと出力が可能になります。
  • 整数、浮動小数点、10 進数、文字列などの多くのデータ型を受け入れることができます。

構文

以下は、列の ENUM データ型を定義するために使用される構文です。

 CREATE TABLE table_name ( Column1, Column2 ENUM ('value_1','value_2','value_3'), Column3… ); 

上記の構文では ENUM 値を 3 つだけ定義していますが、必要に応じて増やすことができます。ここでは、列挙値が常に内部に保持されるようにする必要があります。 引用符で囲まれた文字列リテラル

MySQL では、次の属性を使用して ENUM データ型を定義できます。

NULL ではありません: デフォルトでは、ENUM データ型は NULL です。 NULL 値を許可したくない場合は、ENUM 列を指定するときに NOT NULL プロパティを使用する必要があります。

ヌル: これは DEFAULT NULL と同義であり、そのインデックス値は常に NULL です。

デフォルト: 列に値が指定されていない場合、ENUM データ型によってデフォルト値が挿入されます。つまり、INSERT ステートメントでこの列の値が指定されていない場合は、デフォルト値が挿入されます。 DEFAULT 式では関数を挿入できません。 My SQL の ENUM データ型には、NULL または空の文字列 ('') としての DEFAULT 値が含まれます。

MySQL ENUM の例

次の図を使用して、MySQL で ENUM データ型がどのように機能するかを理解しましょう。ここでは、「」という名前のテーブルを作成します。 シャツ ' これには、id、name、size の 3 つの列が含まれます。

サイズ列には ENUM データ型が使用され、小、中、大、および特大のサイズがあります。 MySQL は、これらの列挙メンバーを数値インデックス (それぞれ small=1、medium=2、large=3、および x-large=4) にマップします。次のクエリを実行してテーブルを作成します。

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', 'large', 'x-large') ); 

次に、次のことを行う必要があります。 入れる 値をテーブルに入力します。挿入中、列挙値は文字列リテラルまたはその数値インデックスとして挿入でき、どちらも同じです。次のステートメントを実行して、テーブルに値を挿入します。

グローバル変数js
 INSERT INTO shirts(id, name, size) VALUES (1,'t-shirt', 'medium'), (2, 'casual-shirt', 3), (3, 'formal-shirt', 4), (4, 'polo-shirt', 'small'); 

ここで、SELECT ステートメントを実行して、テーブルに挿入された値を確認します。

 mysql> SELECT * FROM shirts; 

次の画像には、文字列リテラルの列挙値のみを含む上記のクエリ結果がすべて含まれています。

MySQL 列挙型

ENUM ソート

MySQL は、カラム仕様にデータを挿入した順序に応じた数値インデックスに基づいて列挙値を並べ替えます。 例えば 列挙を ENUM ('b', 'a', '', 'c') として定義した場合。次に、b は a の前に、空の文字列は c (空ではない文字列) の前に、NULL 値は他の値の前に来ます。

したがって、ORDER BY 句を使用して ENUM データ型で予期しない結果が得られたくない場合は、次の規則に従ってください。

  • 列挙値をアルファベット順に定義します。
  • これは、列名がインデックス番号ではなく字句順になっているかどうかを確認するためです。

次の例では、列挙型の並べ替えをより明確に説明します。したがって、シャツのサイズを特定の順序で取得したい場合は、以下のステートメントを実行します。

 mysql> SELECT * FROM shirts ORDER BY size DESC; 

このクエリにより、以下のような出力が得られ、シャツのサイズが降順であることがわかります。

MySQL 列挙型

ENUM データ型の制限事項

MySQL の ENUM データ型の欠点は次のとおりです。

1. 列挙値/メンバーを変更したい場合は、ALTER TABLE コマンドを使用してテーブル全体を再構築することで実行できます。それは私たちのリソースと時間を高価に使用します。

2. 列挙メンバーを含む式は使用できません。たとえば、この CREATE ステートメントは、列挙型メンバーの作成に CONCAT() 関数を使用するため、実行されません。

 CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', CONCAT('med','ium'), 'large', 'x-large') ); 

3. ユーザー変数を列挙メンバーとして使用することはできません。以下の例でそれがわかります。

 SET @mysize = 'large'; CREATE TABLE shirts ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(35), size ENUM('small', 'medium', @mysize, 'x-large') ); 

4. 数値を列挙メンバーとして使用しないことをお勧めします。

5. information_schema データベースにアクセスする必要があるため、完全な情報列挙リストを取得するのは複雑です。

6. 多くのデータベースがこのデータ型をサポートしていないため、ENUM を他の RDBMS に移植する際に問題が発生する可能性があります。

7. 列挙リストに属性を追加することはできません。