2017-12-01 16 views
0

状態略語のチェック制約を作成したいと思います。私はStateカラムに2文字の挿入を許可したいだけです。コードは何ですか? 私のコードは: 状態VARCHAR(2)NOT NULL制約CK_StateAbbrのCHECK( 'XX' のような状態)状態略語チェック制約

私だけの状態のためにXXができるようになるにXXを置くと仮定しています。 CHECK(「[A-Z] [A-Z]」のような状態)を入れますか?

+0

MySQL 8.0またはMariaDBのみ、それ以外の場合は無視されます。 – lad2025

+0

あなたの正規表現は動作します(Mysql 8.0+を前提とすると、この例のようなトリガを使用する必要があります)(https://stackoverflow.com/questions/16005283/is-it-possible-to-enforce-data- mysql-using-regular-expressionを使用してチェックインする))。小文字を許可したい場合は 'CHECK(状態を[A-Z] {2} ')'や 'CHECK(状態を' [a-zA-Z] {2} ')'とすることもできます。 – JNevill

+0

なぜ状態コードのテーブルがなく、そのテーブルに外部キーを使用するだけですか? –

答えて

1

ほとんどのバージョンのMySQLでは、違いはありません。 A check制約は構文として受け入れられますが、実装されていません。

これでいくつかの選択肢が残されます。まず、問題を無視します。これが最も一般的なアプローチです。次に、トリガーを使用します。これは乱雑なコードを作成し、最適ではありません。

第3の方法は、すべての有効な状態略語で表を作成することです。次に、外部キー制約を使用して、値が有効であることを確認できます。