だが、私はこのようなテーブルがあるとしましょう:MySQLのUNIQUE制約は、列の値に基づいて
CREATE TABLE dept (
id VARCHAR(255) NOT NULL PRIMARY KEY,
code VARCHAR(255) NOT NULL,
active BIT NOT NULL,
...
);
問題:
私はcode
列に一意制約を追加します。しかし、active
がtrue
に設定されている場合にのみ適用する必要があります(一意性はアクティブレコード間でのみチェックする必要があります)。 active
= false
と多くのレコードがあり、同じcode
なので、複数の列に対して制約を使用することはできません。私が試した何
:
私は、このような制約が可能であることを証明the documentation内の任意の参照を発見していないが、私はそれがユニークなファンクション索引を使用してother databasesで可能であることを知っています。
もちろん、すべての追加/更新操作で不変条件をチェックするトリガーを書くことはできますが、より効率的なソリューションがあることを願っています。
私はMySQL 5.7.15を使用しています。
これは単純にMySQLでは不可能ですが、私は恐れています。おそらく*おそらく*来る可能性があるのは、ヌル可能な(アクティブなフィールドを置き換える)一意に制約されたカラムを持つことです。 'NULL'のときは' '非アクティブです。' 'NULL''以外のときは一意でなければなりません。それ以外の場合は、ストアドプロシージャを使用してテーブルに読み書きを行うか、トリガを使用して不愉快なことをします。 – wally
おそらくもっとエレガントなものがあるかもしれませんが、より大きな画像(つまり、解決しようとしている全体的な問題)を知っている必要があります。 Big Picture(TM)であなたの質問を更新できますか? – wally