2012-02-23 102 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,1,2)'是完全可能的。 – 2012-02-23 19:23:54

回答

1

您可以在col3上設置NOT NULL並將默認值設置爲''

1

我被教會理解NULL的方式是NULL是一個狀態而不是一個值。所以你實際上並沒有使用NULL值。我會考慮使用空字符串而不是NULL或設置其他默認值。

0

如果您希望數據庫執行該操作,則沒有太多選項。既然你不能強制數據庫去考慮除NULL以外的任何NULL,你也可以;

  • 在列中使用空字符串而不是NULL。如果「」是一個有效的值,並且你希望它與實際的NULL值不同,這隻會導致麻煩。
  • 在列中使用空字符串而不是NULL並添加一個指示NULL值的布爾列。將其添加到唯一索引中,數據庫將從空字符串中分離出「假NULL」。

這兩個選項都會要求您將col3設置爲NOT NULL,並在insert/select上進行一些值映射。