【问题标题】:MySql, InnoDB & Null ValuesMySql、InnoDB 和空值
【发布时间】:2011-02-28 06:51:27
【问题描述】:

以前我在 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 database innodb myisam storage-engines


    【解决方案1】:

    取决于业务规则,但第一个想法是将field_afield_b 设置为表的主键。 AUTO_INCREMENT 列可用于非主键列,但 key 属性必须与 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)
    

    【讨论】:

    • 我能够在我的自动字段上创建一个索引,然后删除主键。然后,我按照建议将字段 A、B 和 C 指定为主要字段。非常感谢!
    • @pws5068:请注意,这将允许 field_c 的每对独特的 field_afield_b 集合重复。
    • 你说得对,这就是我在这种情况下的意图。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2012-01-13
    • 2021-04-29
    • 1970-01-01
    • 2016-10-12
    相关资源
    最近更新 更多