「enum」と「set」のMySQLデータ型の場合、一方を使用することと他方を使用することの違いと長所と短所は何ですか?
データ型の例:
- enum( 'A'、 'B'、 'C')
- set( 'A'、 'B'、 'C')
私が知っている唯一の違いは、ENUMでは1つの値しか選択できないのに対し、SETでは複数の値を選択できるということです。
回答:
ENUMまたはSET列の定義は、列に入力された値に対する制約として機能します。次の条件を満たさない値ではエラーが発生します。
ENUM値は、列定義にリストされている値の1つ、またはそれに相当する内部数値でなければなりません。値をエラー値(つまり、0または空の文字列)にすることはできません。ENUM( 'a'、 'b'、 'c')として定義された列の場合、 ''、 'd'、または 'ax'などの値は無効であり、拒否されます。
SET値は、空の文字列、または列定義にコンマで区切られた値のみで構成される値である必要があります。SET( 'a'、 'b'、 'c')として定義された列の場合、 'd'や 'a、b、c、d'などの値は無効であり、拒否されます。
(a, b, c, d)拒否されません。だけdが拒否されるため、値はになります(a, b, c)。
CREATE TABLE setTest(
attrib SET('bold','italic','underline')
);
INSERT INTO setTest (attrib) VALUES ('bold');
INSERT INTO setTest (attrib) VALUES ('bold,italic');
INSERT INTO setTest (attrib) VALUES ('bold,italic,underline');
上記のコードをコピーしてmysqlに貼り付けると、SETが実際にはコレクションであることがわかります。宣言した属性の各組み合わせを格納できます。
CREATE TABLE enumTest(
color ENUM('red','green','blue')
);
INSERT INTO enumTest (color) VALUES ('red');
INSERT INTO enumTest (color) VALUES ('gray');
INSERT INTO enumTest (color) VALUES ('red,green');
上記のコードをコピーすることもできます。また、各ENUMは実際には1回に1回しか保存できないことがわかります。そして、最後の2行の結果は両方とも空になることがわかります。
実際、それは非常に簡単です。
ENUM( 'Yes'、 'No'、 'Maybe')を定義するときは、これらの値の1つ(またはそれらの位置インデックス番号)のみを挿入する必要があります。
あなたが定義する際SET(「R」、「W」、「X」)を、あなたがすることができ、空の文字列、INSERTまたはこれらの値を1つ以上。事前定義されたセットにないものを挿入すると、代わりに空の文字列が挿入されます。挿入する前に、重複する値はすべて破棄されるため、許可された各値のインスタンスが1つだけ挿入されることに注意してください。
これがそれをクリアすることを願っています。
Winbobobの回答は正しくなく、欠陥のある例が含まれていることに注意してください。複数の値を挿入する場合、値はコンマで区切られた文字列である必要があります。彼のすべての挿入は、実際には1つの値のみを挿入しています(最後の2つは定義されたセットに含まれていません)