Вопрос

Раньше я использовал 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top