2

私はmysqlデータベースを使用しています。

テーブルにフィールドuser_typeがありUSERます。このフィールドの値を ('ADMIN','AGENT','CUSTOMER') のいずれかに制限したいと思います。

上記の可能な値以外のものを挿入しようとすると、insert ステートメントは失敗するはずです。また、「CUSTOMER」にデフォルト設定する必要があります。挿入ステートメントで何も指定されていません。

私が考えることができる可能な解決策は の使用ですがtriggers、これをより効率的に処理する方法を知りたいです (おそらく create table ddl 自体で?)。

任意のアイデア、これを行う方法は?

4

2 に答える 2

8

これが、列タイプ「列挙型」の目的です。文字列のように扱い、バックグラウンドで 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 つが有効になっているモードを意味します。

于 2012-08-28T18:48:06.720 に答える