Isso é apenas um palpite, já que você não forneceu seu esquema, mas uma das colunas em sua chave exclusiva é anulável?
Editar:
Como @G-Nugget diz nos comentários, você precisa de uma chave exclusiva nas colunas em questão:
http://dev.mysql.com/doc /refman/5.6/en/insert-on-duplicate.html
Você precisa ter uma chave exclusiva na combinação de colunas que deve ser exclusiva.
por exemplo:
ALTER TABLE yourTable ADD UNIQUE KEY (`canid`, `categoryid`);
Além disso, ao fazer perguntas sobre o banco de dados, inclua
SHOW CREATE TABLE
para as tabelas em questão.