AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 46803
Accepted
Chris Burton
Chris Burton
Asked: 2013-07-23 10:52:55 +0800 CST2013-07-23 10:52:55 +0800 CST 2013-07-23 10:52:55 +0800 CST

1062 Entrada duplicada, mas não há duplicatas?

  • 772

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.

mysql
  • 5 5 respostas
  • 92073 Views

5 respostas

  • Voted
  1. Best Answer
    David Spillett
    2013-07-23T11:12:13+08:002013-07-23T11:12:13+08:00

    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:

    SELECT * 
    FROM   <table> 
    WHERE  <keyfield> = 'Upping Your Type Game-http://jessicahische.is/talkingtype'
    

    ou se essa chave for um composto

    SELECT * 
    FROM   <table> 
    WHERE  <keyfield1> = 'Upping Your Type Game' 
    AND    <keyfield2> = 'http://jessicahische.is/talkingtype'
    

    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 INSERTvalores 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 UPDATEopçã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 MERGEinstruçõ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.

    • 7
  2. know_some
    2018-04-04T00:39:00+08:002018-04-04T00:39:00+08:00

    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.

    • 2
  3. Buttle Butkus
    2019-01-15T21:28:02+08:002019-01-15T21:28:02+08:00

    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.

    mysql> select * from users_sessions;
    +---------+----------------------------+---------------------+
    | user_id | session_id                 | last_accessed       |
    +---------+----------------------------+---------------------+
    |       3 | 6n02k8catt2kdn30b92ljtrpc6 | 2019-01-13 23:30:53 |
    +---------+----------------------------+---------------------+
    1 row in set (0.00 sec)
    
    mysql>
    mysql> INSERT INTO `users_sessions` VALUES(3,"fbfibdog1qumlj5mg4kstbagu7","2019-01-14 18:37:15") ON DUPLICATE KEY UPDATE last_accessed = "2019-01-14 18:37:15";
    ERROR 1062 (23000): Duplicate entry '3-fbfibdog1qumlj5mg4kstbagu7' for key 'PRIMARY'
    

    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.

    mysql> INSERT INTO `users_sessions` VALUES(3,"fbfibdog1qumlj5mg4kstbagu7","2019-01-14 18:37:15");
    ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`login`.`users_sessions`, CONSTRAINT `fk_sessions_id` FOREIGN KEY (`session_id`) REFERENCES `sessions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)
    

    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 uma REPLACE INTOconsulta e obtive o mesmo erro.

    mysql> REPLACE INTO `users_sessions` VALUES(3,"fbfibdog1qumlj5mg4kstbagu7","2019-01-14 18:37:15");
    ERROR 1062 (23000): Duplicate entry '3-fbfibdog1qumlj5mg4kstbagu7' for key 'PRIMARY'
    

    Se você encontrar esse erro sem motivo aparente, verifique suas chaves estrangeiras. Tente uma INSERTconsulta regular (em vez de REPLACE INTOou INSERT ... ON DUPLICATE KEY UPDATE...) também.

    • 1
  4. user3342816
    2021-05-04T02:12:55+08:002021-05-04T02:12:55+08:00

    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.

    INSERT INTO foo (id) VALUES(new.id) 
    

    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;)

    • 0
  5. Kazeem Olanipekun
    2016-03-16T09:38:19+08:002016-03-16T09:38:19+08:00

    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 varcharpara textou biginte refaça a inserção . Isso resolverá o problema.

    If(!$insert){
    $alter=Mysql_query("alter table `table_name` 
                        change `table_name` `table_name` bigint(255) not null");
    If($alter){
    //you then redo your insertion.
    }
    }
    
    • -2

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve