2010-06-06 57 views
3

以前我爲MySql使用MyISAM存儲引擎,並且我已經定義了三個字段的組合,使其唯一。MySql,InnoDB和NULL值

現在我已經切換到InnoDB,我認爲這造成了這個問題,現在NULL!= NULL。

所以下面的表:

ID (Auto) | Field_A | Field_B | Field_C 

我可以插入(Field_A,Field_B,Field_C)值(1,2,NULL)(1,2,NULL)(1,2,NULL)無限多次。

如何防止此行爲?

回答

1

取決於業務規則,但第一個想法是將field_afield_b設置爲表格的主鍵。一個AUTO_INCREMENT列可用於非主鍵列,但關鍵屬性具有要與AUTO_INCREMENT列相關聯:

CREATE TABLE your_table (
    ID int auto_increment not null, 
    Field_A VARCHAR(45), 
    Field_B VARCHAR(45), 
    Field_C VARCHAR(45), 
    key(ID), --without this, you'll get MySQL ERROR #1075 
    primary key(field_a, field_b) 
); 

另一種方法是添加一個unique constraint (MySQL implements them as an index)

CREATE UNIQUE INDEX blah_ind USING BTREE ON your_table(field_a, field_b) 
+1

相關:http://forums.mysql.com/read.php?22,264498,264967#msg-264967 – 2010-06-06 00:33:42

+0

我能夠在我的汽車領域創建一個索引,然後刪除主鍵。然後我建議將字段A,B和C分配爲主要字段。非常感謝! – pws5068 2010-06-06 00:36:09

+0

@ pws5068:請注意,這將允許爲每個唯一的一對「field_a」和「field_b」設置重複的「field_c」。 – 2010-06-06 00:37:39