Пользователи по-прежнему могут добавлять дубликаты записей без сообщений об ошибках.
Что вы подразумеваете под "дубликатами"?
В зависимости от сопоставления, регистр, акцент и т. Д. Могут иметь значение, и 'test'
и 'TEST'
не будут считаться дубликатами.
Не могли бы вы опубликовать результаты SHOW CREATE TABLE mytable
?
Кроме того, не могли бы вы выполнить этот запрос:
SELECT date, door, shift, route, trailer
FROM mytable
GROUP BY
date, door, shift, route, trailer
HAVING COUNT(*) > 1
Если он возвращает строки, проблема с индексом; если это не так, проблема в том, что вы определили «дубликат».
Обновление:
Ваши столбцы позволяют NULL
с.
NULL
значения в MySQL
не считаются дублирующими с точки зрения индекса UNIQUE
:
CREATE TABLE testtable (door VARCHAR(20), shift VARCHAR(15), UNIQUE KEY (door, shift));
INSERT
INTO testtable
VALUES
('door', NULL),
('door', NULL);
SELECT door, shift
FROM testtable
GROUP BY
door, shift
HAVING COUNT(*) > 1;
Из документации :
Индекс UNIQUE
создает ограничение, так что все значения в индексе должны быть различны. При попытке добавить новую строку со значением ключа, совпадающим с существующей строкой, возникает ошибка. Это ограничение не распространяется на значения NULL
, за исключением механизма хранения BDB
. Для других механизмов индекс UNIQUE
допускает несколько значений NULL
для столбцов, которые могут содержать NULL
. Если вы задаете значение префикса для столбца в индексе UNIQUE
, значения столбца должны быть уникальными в пределах префикса.