Questa è solo un'ipotesi poiché non hai fornito il tuo schema, ma una delle colonne nella tua chiave univoca è annullabile?
Modifica:
Come dice @G-Nugget nei commenti, è necessaria una chiave univoca sulle colonne in questione:
http://dev.mysql.com/doc /refman/5.6/en/insert-on-duplicate.html
Devi avere una chiave univoca sulla combinazione di colonne che dovrebbero essere univoche.
es:
ALTER TABLE yourTable ADD UNIQUE KEY (`canid`, `categoryid`);
Inoltre, quando si pongono domande sul database, includere SHOW CREATE TABLE
per le tabelle in questione.