以前我为 MySql 使用 MyISAM 存储引擎,并且我将三个字段的组合定义为唯一的。
现在我已经切换到 InnoDB,我认为它导致了这个问题,现在 NULL != NULL。
所以对于下表:
ID (Auto) | Field_A | Field_B | Field_C
我可以无限次插入 (Field_A,Field_B,Field_C) Values(1,2,NULL) (1,2,NULL) (1,2,NULL) 。
如何防止这种行为?
以前我为 MySql 使用 MyISAM 存储引擎,并且我将三个字段的组合定义为唯一的。
现在我已经切换到 InnoDB,我认为它导致了这个问题,现在 NULL != NULL。
所以对于下表:
ID (Auto) | Field_A | Field_B | Field_C
我可以无限次插入 (Field_A,Field_B,Field_C) Values(1,2,NULL) (1,2,NULL) (1,2,NULL) 。
如何防止这种行为?
取决于业务规则,但第一个想法是设置field_a
和field_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)
);
另一种选择是添加唯一约束(MySQL 将它们实现为索引):
CREATE UNIQUE INDEX blah_ind USING BTREE ON your_table(field_a, field_b)