MySql, InnoDB и нулевые значения

Раньше я использовал движок хранения 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 ответ

Решение

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