NULLのイメージを誤解していたので、備忘録として書きます。
概要
- MySQLで複合ユニーク制約をしているカラムにNULLが入っている場合、ユニークとならないと知った
- NULL = NULL とはならないため
例
idとnameとageで複合ユニーク制約があっても、NULLが含まれる場合ユニークとならない
id | name | age |
---|---|---|
1 | foo | 20 |
2 | bar | 30 |
2 | bar | NULL |
教訓
- 複合ユニークに使うカラムはNOT NULLにする
参考
「NULLがUNIQUE制約に縛られないことを利用する」のは、正当なNULLの使い方 - 極北データモデリング
NULLは「値がある(が、システムはその値を知らない)状態」