2012-02-23 8 views
0

は、私は4列複数の列に一意のキーは、私は重複行をしたくないので、複数の行

Column Type  Null Default 
---------------------------------- 
id  int(11)  No None  AUTO_INCREMENT 
col1 int(11)  No None 
col2 int(11)  No None 
col3 varchar(20) Yes Null 

私はCOL1、COL2、COL3でインデックスを作成しているとMySQLのテーブルを持つことができます。私はテーブルが重複した行を受け入れるようにNULL値が別個と見なされることを理解します。

col1、col2、col3の一意の値を持つ行を持つことができる最良の選択肢は何ですか?

+1

インデックスの一意性の判断ではNULLがカウントされないので、重複したerowが表示されます。 '(null、1,2)'を持つ2つ以上のレコードがすべて可能です。 –

答えて

1

NOT NULLcol3に設定し、デフォルト値を''に設定できます。

1

NULLを理解するように教えられた方法は、NULLが状態であり値ではないということです。つまり、実際にはNULLとは異なる値を持っているわけではありません。私は実際にNULLの代わりに空の文字列を使用するか、または他のデフォルト値を設定することを検討します。

0

データベースで強制する場合は、多くのオプションがありません。あなたは別のもの以外の何かをNULLとみなすようにデータベースを強制することはできないので、

  • NULLではなく列の空の文字列を使用します。これは ""有効な値で、実際のNULL値と区別したい場合にのみ問題を引き起こします。
  • NULLではなく列の空の文字列を使用し、NULL値を示すブール型列を追加します。それをユニークなインデックスにも追加すると、データベースは空の文字列から "偽のNULL"を分離します。
  • どちらのオプションでも、col3をNOT NULLに設定し、insert/selectで値のマッピングを行う必要があります。

    関連する問題