Почему некорректно работает уникальный составной индекс в MySQL?

352
26 января 2017, 02:29

Здравствуйте.

Есть таблица с уникальным составным индексом из 2 полей, вот запрос для её создания:

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `field1` int(11) unsigned DEFAULT NULL,
  `field2` int(11) unsigned NOT NULL,
  `field3` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq` (`field1`,`field2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Никак не пойму, почему я могу добавлять одинаковые записи при условии, что поле field1 равен NULL. Вот пример наполнения таблицы:

INSERT INTO `test` (`id`, `field1`, `field2`, `field3`)
VALUES
    (1, 1, 1, 1),
    (3, 1, 2, 1),
    (4, NULL, 1, 1),
    (5, NULL, 1, 1),
    (6, NULL, 1, 1);
Answer 1

Взято отсюда:

For all engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.

Т.е., по сути, разрешив вставлять в один из столбцов значения NULL вы тем самым сами сломали UNIQUE индекс.

READ ALSO
Каким образом передать данные формы с одного домена на другой?

Каким образом передать данные формы с одного домена на другой?

Добрый деньЕсть у меня значит сайт, на котором имеется форма метода POST

327
wpdb в wp query оптимизация запроса

wpdb в wp query оптимизация запроса

Можно ли как-то оптимизировать запрос? Или конвертировать его в wp_queryЕсли есть что-то жутко неграмотное, укажите пожалуйста

352
Как выбрать строку с максимальным id

Как выбрать строку с максимальным id

Как выбрать строку с максимальным id где в колонке page будет poll

366
Java Swing Перекрытие элемента

Java Swing Перекрытие элемента

Доброго времени сутокКак работает позиционирование элементов в Swing относительно слоев? Как сделать так,чтобы один элемент перекрыл другой?...

376