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)