- ベストアンサー
MySQLで0以外をユニークにする制約をかけたい
MySQLで主キーのidの他にfoofoo_idというint型カラムがあります。 このfoofoo_idを0以外をユニークしたいのですが可能でしょうか? MySQLのバージョンは8.0.21です。 検索をかけたところNULL以外をユニークにするという記事を見つけたので、下記のようにNULLではなく0にしてみましたが、そもそもWHEREの部分がダメのようで通りませんでした。 CREATE UNIQUE INDEX uq_foofoo_id ON `hogehoge`.`sample`(foofoo_id) WHERE foofoo_id IS NOT '0' ;
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
重複値を許さない、ただしNULLは許容する、のがUNIQUE制約です。 値0が重複して登場するのならその列をUNIQUE制約にはできないでしょう。 UNIQUE制約において重複登録できるのはnullのみ、 そして今回の質問において重複登録を認めたいのは0のみ、ですから、 質問者の意に沿わないかもしれませんが、私なら、 その表のselect参照時にfoofoo_idがnullならば0を返す coalesce(foofoo_id, 0) を次善の策として検討すると思います。
お礼
ご返答ありがとうございます。 制約なのですね。自分もでもいろいろ調べましたが多分そうだろうなという感じでした。 実装方法を変更したいと思います。