3

以前我为 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) 。

如何防止这种行为?

4

1 回答 1

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)
);

另一种选择是添加唯一约束(MySQL 将它们实现为索引)

CREATE UNIQUE INDEX blah_ind USING BTREE ON your_table(field_a, field_b)
于 2010-06-06T00:29:08.593 回答