• ベストアンサー

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' ;

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

重複値を許さない、ただしNULLは許容する、のがUNIQUE制約です。 値0が重複して登場するのならその列をUNIQUE制約にはできないでしょう。 UNIQUE制約において重複登録できるのはnullのみ、 そして今回の質問において重複登録を認めたいのは0のみ、ですから、 質問者の意に沿わないかもしれませんが、私なら、 その表のselect参照時にfoofoo_idがnullならば0を返す coalesce(foofoo_id, 0) を次善の策として検討すると思います。

TeijigoTeatime
質問者

お礼

ご返答ありがとうございます。 制約なのですね。自分もでもいろいろ調べましたが多分そうだろうなという感じでした。 実装方法を変更したいと思います。

関連するQ&A