2010-06-06 56 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