3

以前は、MySqlにMyISAMストレージエンジンを使用しており、3つのフィールドの組み合わせを一意に定義していました。

これで、この問題の原因であると思われる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_aですfield_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)
);

もう1つの方法は、一意の制約を追加することです(MySQLはそれらをインデックスとして実装します)

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