Eu continuo recebendo esse erro:
falhou ao INSERT: [1062] Entrada duplicada 'Upping Your Type Game- http://jessicahische.is/talkingtype ' para a chave 'PRIMARY'.
O problema é que não há entradas duplicadas. É por isso que estou confuso ao receber esse erro.
Existe alguma maneira de verificar usando o InnoDB?
Eu tentei exportar a tabela e ler o código SQL e fiz uma busca por duplicatas, mas não havia nenhuma.
Não está dizendo que já existe uma entrada duplicada na tabela , está dizendo que já existe uma entrada com esse valor para a chave primária e está se recusando a inserir uma segunda por esse motivo.
Eu suspeito se você executar:
ou se essa chave for um composto
Você encontrará uma linha correspondente e que seu código no ponto do erro está tentando inserir uma segunda.
Lidando com duplicatas na inserção:
Se você tentar
INSERT
valores duplicados para uma chave primária (ou um índice exclusivo), sempre obterá esse erro. Existem algumas maneiras de contornar isso: verifique antes de inserir e faça uma atualização (se algo pode ter mudado) ou simplesmente não faça nada.Há também a
ON DUPLICATE KEY UPDATE
opção específica do mysql (consulte https://stackoverflow.com/questions/1218905/how-do-i-update-if-exists-insert-if-not-aka-upsert-or-merge-in-mysql ) se você quiser sacrificar a compatibilidade com outros RDBMSs.A partir da versão 9.5, o Postgres suporta um recurso semelhante com sintaxe ligeiramente diferente (
ON CONFLICT DO UPDATE/NOTHING
- veja https://wiki.postgresql.org/wiki/UPSERT ).MS SQL Server, Oracle e alguns outros sistemas suportam
MERGE
instruções conforme definido no padrão SQL:2003 (consulte https://en.wikipedia.org/wiki/Merge_(SQL) ), que se destina a obter a mesma funcionalidade e muito mais. Tenha cuidado com qualquer uma dessas opções se a compatibilidade entre bancos de dados for (ou provavelmente será no futuro) um de seus objetivos.Você pode ter atingido o limite de sua coluna id (a PRIMARY KEY). Por exemplo, se sua coluna for definida como tinyint(4), uma vez que você atingiu o valor de 127, você não pode ficar mais alto. Quando você tenta inserir nessa coluna, o valor mais alto ainda é 127, mas você já tem uma entrada com esse valor, então o erro informará que você tentou inserir uma entrada duplicada ('127').
Solução: altere a definição de sua CHAVE PRIMÁRIA para um INT maior.
Acabei de receber o mesmo erro. Minha tabela tem apenas 1 linha, e não há duplicata.
TLDR: verifique suas chaves estrangeiras, verifique se o valor existe na tabela pai. O MySQL 5.6.3 aparentemente não pode lhe dizer a verdadeira razão do erro.
Não existe essa chave duplicada!
Tentei executar a mesma inserção sem a
ON DUPLICATE KEY ...
cláusula e consegui uma pista melhor do que estava acontecendo.Agora estamos em algo. Então, tentei executar a consulta original com um valor diferente que tenha um valor correspondente na tabela de chave estrangeira. A consulta foi executada sem problemas.
Por que o MySQL parece emitir o erro errado? Não tenho certeza, mas provavelmente tem a ver com a forma como
ON DUPLICATE KEY UPDATE
é implementado. Tentei executar a mesma consulta de inserção como umaREPLACE INTO
consulta e obtive o mesmo erro.Se você encontrar esse erro sem motivo aparente, verifique suas chaves estrangeiras. Tente uma
INSERT
consulta regular (em vez deREPLACE INTO
ouINSERT ... ON DUPLICATE KEY UPDATE...
) também.Isso também pode ser acionado se houver um acionador que crie um conflito.
Tendo a tabela A e B. Quando um novo registro é inserido em A, a tabela B é atualizada pelo trigger.
Agora trunque A e esqueça de truncar B.
A inserção em A agora falhará para qualquer consulta em que id exista em B (quando B.id for exclusivo.)
Tinha uma tabela de teste que esqueci, daí esse erro, que a princípio era um pouco enigmático, considerando que A estava vazio;)
Eu tenho esse erro se tiver desligamento do sistema ou problema de rede. Você realmente não tem uma duplicata em seu db. Isso é erro de banco de dados do mysql ... tudo o que você precisa fazer é que, se você fizer sua inserção e não for verdade, apenas altere uma das colunas da sua tabela que você deseja inserir de
varchar
paratext
oubigint
e refaça a inserção . Isso resolverá o problema.