Mysql, Innodb & Null значения
-
24-10-2019 - |
Вопрос
Раньше я использовал Myisam Storage Engine для MySQL, и я определил комбинацию трех полей, чтобы быть уникальным.
Теперь я перешел на Innodb, что, я полагаю, вызвал эту проблему, а теперь null! = NULL.
Итак, для следующей таблицы:
ID (Auto) | Field_A | Field_B | Field_C
Я могу вставить (field_a, field_b, field_c) значения (1,2, нулевая) (1,2, нулевая) (1,2, нулевая) бесконечно много раз.
Как я могу предотвратить такое поведение?
Решение
Зависит от бизнес -правил, но первая идея - это установить 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)