これが、列タイプ「列挙型」の目的です。文字列のように扱い、バックグラウンドで int として格納され、DDL で定義された値のいずれかである必要があります。
CREATE TABLE users (
id int unsigned NOT NULL auto_increment primary key,
user_type enum('ADMIN', 'AGENT', 'CUSTOMER') NOT NULL default 'CUSTOMER'
)
次に、次のように挿入します。
INSERT INTO users (user_type) VALUES ('ADMIN'); // success
INSERT INTO users (user_type) VALUES ('ANONYMOUS'); // failure (or '' if not "strict" mode)
INSERT INTO users (user_type) VALUES (default(user_type)); // uses default
INSERT INTO users () VALUES (); // uses default
INSERT INTO users (user_type) VALUES (NULL); // failure
ノート
クエリが実際に失敗するようにするには、「SQL 厳密モード」を使用する必要があることに注意してください。それ以外の場合は、「空の文字列」値 (数値が 0 であるという点で少し特殊です) が挿入されます。
このドキュメントページを引用:
このマニュアルで「strict モード」と呼ぶ場合、STRICT_TRANS_TABLES または STRICT_ALL_TABLES の少なくとも 1 つが有効になっているモードを意味します。