2010-06-21 46 views
9

我注意到,如果我有兩列,column_a和column_b一個獨特的複合鍵,那麼我的SQL,如果一列是空忽略此限制。MySql的複合鍵和空值

E.g.

如果column_a = 1和column_b = NULL我可以插入column_a = 1和column_b = null作爲儘管我非常喜歡

如果column_a = 1和column_b = 2 I只能插入此值一次。

是否有應用該約束的方式,比也許改變了列等爲NOT NULL,並設置默認值?

回答

13

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

「的唯一索引創建的約束,使得該指數的所有值必須是不同的。如果你嘗試添加一個新行與匹配現有行的鍵值時發生錯誤。這種約束不適用於除BDB存儲引擎以外的NULL值。對於其他引擎,UNIQUE索引允許爲包含NULL的列創建多個NULL值。「

所以,不,你不能讓MySQL把NULL作爲一個獨特的價值。我想你有幾個選擇:你可以做你在你的問題中提出的建議,並存儲一個「特殊值」而不是null,或者你可以使用BDB引擎作爲表格。儘管如此,我認爲這種微小的行爲差異並不能保證存儲引擎的不尋常選擇。

+0

謝謝錘!是的,存儲一個特殊的值不會傷害太多,對於我來說,改變存儲機制絕對是一個更好的選擇。 – stevebot 2010-06-21 17:22:39