MySql, InnoDB и нулевые значения - PullRequest
3 голосов
/ 06 июня 2010

Раньше я использовал механизм хранения MyISAM для MySql и определил комбинацию трех полей как уникальную.

Теперь я переключился на 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 Ответ

1 голос
/ 06 июня 2010

Зависит от бизнес-правил, но первая идея состоит в том, чтобы установить 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)
...