Вы уверены, что первичный ключ правильный? Использование этого первичного ключа идентифицирует строку также по значению cnt, которое должно быть счетчиком.
Я не проверял это, но я думаю, что следующий запрос выдаст ошибку, если вы начнете с пустой таблицы.
INSERT INTO linked_mem
( id1, id2, id31, id4, cnt)
VALUES
(1, 1, 1, 1, 1), // (1, 1, 1, 1, 1) added
(1, 1, 1, 1, 1), // (1, 1, 1, 1, 1) -> (1, 1, 1, 1, 2)
(1, 1, 1, 1, 1), // (1, 1, 1, 1, 1) added (now two rows)
(1, 1, 1, 1, 1) // error
ON DUPLICATE KEY UPDATE cnt = cnt+1
в четвертом ряду (1, 1, 1, 1, 1) будет обновлено до (1, 1, 1, 1, 2), но это уже существует.