Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] duplicate entry ´1403´ for key 'primary'

Estas en el tema de duplicate entry ´1403´ for key 'primary' en el foro de Mysql en Foros del Web. Buenos días!!! tengo un pequeyo problema que no consigo solucionar, estoy aprendiendo SQL asi que estoy bastante perdida. He creado en mysql la siguiente tabla: ...
  #1 (permalink)  
Antiguo 23/03/2015, 08:34
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
duplicate entry ´1403´ for key 'primary'

Buenos días!!!

tengo un pequeyo problema que no consigo solucionar, estoy aprendiendo SQL asi que estoy bastante perdida.

He creado en mysql la siguiente tabla:
Código SQL:
Ver original
  1. CREATE TABLE prueba(
  2.  id INT AUTO_INCREMENT,
  3.  fecha VARCHAR(50),
  4.  mensaje VARCHAR(500),
  5.  PRIMARY KEY(id)
  6. );

y le paso un archivo txt de la siguiente forma:
Código SQL:
Ver original
  1. LOAD DATA INFILE ´resultados.txt´ INTO TABLE prueba FIELDS TERMINATED BY ´;´ LINES TERMINATED BY ´/n´;
y me devuelve:
Código MySQL:
Ver original
  1. ERROR 1062 (23000): Duplicate entry ´1403´ for key ´PRIMARY´

?Cómo es esto posible si la tabla esta recien creada y totalmente vacia?

Gracias!!!!

Última edición por gnzsoloyo; 23/03/2015 a las 09:47
  #2 (permalink)  
Antiguo 23/03/2015, 08:43
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 8 meses
Puntos: 67
Respuesta: duplicate entry ´1403´ for key 'primary'

Comprueba que no se inserte nada antes de insertar algo nuevo.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #3 (permalink)  
Antiguo 23/03/2015, 08:59
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

he probado a ver si habia algo dentro de la tabla, además de probar a borrar todo lo que pudiera haber antes de insertar el txt con:

Código SQL:
Ver original
  1. TRUNCATE prueba;
y
Código SQL:
Ver original
  1. DELETE FROM prueba WHERE 1;

Y sigo obteniendo el mismo error, no entiendo que puede ser, realmente la tabla esta completamente vacia.
Alguna idea?

Gracias!!!

Última edición por gnzsoloyo; 23/03/2015 a las 09:48
  #4 (permalink)  
Antiguo 23/03/2015, 09:04
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 8 meses
Puntos: 67
Respuesta: duplicate entry ´1403´ for key 'primary'

Le has asignado el autoincrement, ya que cuando va insertando es posible que se repita alguno y te devuelve el error.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #5 (permalink)  
Antiguo 23/03/2015, 09:07
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

Gracias MaNuX0218!!

No entiendo bien, te refieres a que devuelve error porque es posible que existan por ejemplo dos fechas iguales en el txt y al insertarlas en mysql produce el error?

Gracias!!
  #6 (permalink)  
Antiguo 23/03/2015, 09:11
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 8 meses
Puntos: 67
Respuesta: duplicate entry ´1403´ for key 'primary'

No, lo que duplica es el id, por ejemplo cuando se inserta pasa a ser por ejemplo esto:

1-Nombre-Region
2-Nombre-region

Y en tu caso es posible que se inserte de esta manera:

1-Nombre-region
1-nombre-region

Donde se repite 1 hay el error.

Por lo que purbea a crear la tabla de esta manera haber:


Código SQL:
Ver original
  1. CREATE TABLE prueba(
  2. id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  3. fecha VARCHAR(50),
  4. mensaje VARCHAR(500)
  5. );

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.

Última edición por gnzsoloyo; 23/03/2015 a las 09:48
  #7 (permalink)  
Antiguo 23/03/2015, 10:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duplicate entry ´1403´ for key 'primary'

Cita:
Iniciado por noejb Ver Mensaje
Gracias MaNuX0218!!

No entiendo bien, te refieres a que devuelve error porque es posible que existan por ejemplo dos fechas iguales en el txt y al insertarlas en mysql produce el error?

Gracias!!
Vamos por partes: En esta sentencia hay al menos un error: estás confundiendo los apostrofos con los acentos agudos. Los primeros se usan para cadenas de texto, y los segundos para nombres de objetos de base de datos. No es lo mismo, y el resultado de esta consulta es impredecible:

Código MySQL:
Ver original
  1. LOAD DATA INFILE ´resultados.txt´
  2. INTO TABLE prueba
Esto debe escribirse así:
Código MySQL:
Ver original
  1. LOAD DATA INFILE 'resultados.txt'
  2. INTO TABLE prueba
Además estabas escapando mal los saltos de lína.
Por otro lado, los saltos de linea se escriben diferente si es un servidor Windows que en otros casos, por lo que te recomiendo ir al manual: http://dev.mysql.com/doc/refman/5.6/en/load-data.html

Fuera de ese detalle, debes recordar que:
1) Si usas sin indicar qué columnas cargará en la tabla, MySQL asume que hay una columna por cada una del archivo, y en el mismo orden que tienen en la tabla.
2) El archivo no debe tener una primera línea con los encabezados de columnas, es decir sólo debe contener datos.
3) Si hay una primera linea de nombres de columna, debe indicarse que se ignore la primera linea.
4) El final de cada linea debe ser un salto de linea como se indique. Si hay un separador de columnas esperará recibir una columna más, y eso puede generar un error de ejecución.
5) Muy importante: Todas las restricciones que existen definidas en la tabla operarán al instante de la carga, por lo que si no hay datos asignados a una columna que sea NOT NULL, se geeraará un error. Además, si una de las columnas tiene valores duplicados, y es PK, generará un fallo de ejecución también.

Ahora bien, suponiendo que en ese archivo no exista el ID autonumérico, entonces debes indicar qué columnas se están cargando, para dejar que MySQL genere el dato autonumerico:

Código MySQL:
Ver original
  1. LOAD DATA INFILE 'resultados.txt'
  2. INTO TABLE prueba(nombre, region)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 24/03/2015, 02:09
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

Muchas gracias MaNuX0218 y gnzsoloyo,

he probado lo que me recomendasteis, igualmente con la estructura que me definio MaNuX0218 y las comillas bien puestas e indicando los parametros que voy a cargar como recomendo gnzsoloyo sigo obteniendo errores, pero diferentes.

Con la recomendación MaNuX0218 de la estructura sigo obteniendo el mismo error que al principio: duplicate entry ´1403´ for key 'primary'

Y con la recomendación de gnzsoloyo de indicar las columnas que se estan cargango obtengo el error: "You have an error in your SQL syntax; check the manual .... for the right syntax to use near 'FIELDS TERMINATED BY ';' LINES TERMINATED BY '/'' at line 1

No tengo ni idea de que puedo estar haciendo mal, he probado a no incluir el auto_increment y funciona de maravilla, pero con el auto_increment...

Mil gracias!!
  #9 (permalink)  
Antiguo 25/03/2015, 01:10
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

Cabe la posibilidad de que se este almacenando algo en la fila 1403 al crear la tabla y antes de insertar los datos provenientes del txt?

Gracias!!!
  #10 (permalink)  
Antiguo 25/03/2015, 02:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duplicate entry ´1403´ for key 'primary'

No. No existe el concepto de "fila" que dices. No estás trabajando en Excel.
Para dar el error, el ID 1403 tiene que estar efectivamente duplicado en tu archivo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 25/03/2015, 03:26
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

Gracias gnzsoloyo!

No entiendo entonces... el valor 1403 se genera de auto_increment, por tanto no entiendo que motivo puede haber para que se duplique automaticamente.

Sin el campo auto_increment funciona perfectamente, pero lamentablemente lo necesito.

Perdidisima estoy...
  #12 (permalink)  
Antiguo 25/03/2015, 03:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duplicate entry ´1403´ for key 'primary'

Si el dato esta ingresando en el archivo, el autoincremental no se aplica. Dependerá de lo que el archivo contenga.
Por eso te sugerí que indicases las columnas. Lee el manual de referencia y fíjate el que error de sintaxis es.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 25/03/2015, 04:01
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

Gracias!!

He indicado las columnas y revisado el error de sintaxis, teoricamente son las comillas, pero es que no me lo explico...
  #14 (permalink)  
Antiguo 25/03/2015, 04:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duplicate entry ´1403´ for key 'primary'

Postea la última sintaxis que usaste.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 25/03/2015, 04:11
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

Esta es:

Código MySQL:
Ver original
  1. LOAD DATA INFILE 'resultado.txt'
  2. INTO TABLE prueba(fecha, mensaje)

Última edición por gnzsoloyo; 25/03/2015 a las 05:56
  #16 (permalink)  
Antiguo 25/03/2015, 06:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: duplicate entry ´1403´ for key 'primary'

Vamos a ver desde el principio, de nuevo...
Esta sintaxis:
Código MySQL:
Ver original
  1. LOAD DATA INFILE 'resultado.txt'
  2. INTO TABLE prueba(fecha, mensaje)
te servirá si y sólo si e archivo de datos contiene algo como:
Cita:
2015-01-03;mensaje1
2015-01-03;mensaje2
2015-01-03;mensaje3
donde mensaje1, mensaje2 y mensaje3 representan textos de mensajes que no contienen ";".
Si el archivo de terxto contiene además una columna numerica de ID inicial, entonces esa sintaxis ya no serviría,
Cita:
1;2015-01-03;mensaje1
2;2015-01-03;mensaje2
3;2015-01-03;mensaje3
y sólo podrías usar la clasica:
Código MySQL:
Ver original
  1. LOAD DATA INFILE 'resultado.txt'
  2. INTO TABLE prueba
¿Eso queda claro?

Ahora bien, de acuerdo a las pruebas que realzaste, se dispara un error de clave duplicada, para lo cual hay que verificar si en realidad eso sucede y en qué momento. Para ello lo mejor es cargar los datos en una tabla transaccional antes de ponerlos en la final:
Código MySQL:
Ver original
  1. CREATE TABLE prueba_temp(
  2.  id INT,
  3.  fecha VARCHAR(50),
  4.  mensaje VARCHAR(500)
  5. );
No le pongo PK para evitar que la restricción se dispare.
Luego:
Código MySQL:
Ver original
  1. LOAD DATA INFILE 'resultado.txt'
  2. INTO TABLE prueba_temp
Y finalmente comprobamos si alguno de los campos ID está duplicado:
Código MySQL:
Ver original
  1. SELECT id, fecha, mensaje
  2. FROM prueba_temp
  3. WHERE id IN(SELECT id  FROM prueba_temp GROUP BY id HAVING COUNT(*) > 1)

o bien solamente:
Código MySQL:
Ver original
  1. SELECT id, COUNT(1) repeticiones
  2. FROM prueba_temp
  3. HAVING COUNT(*) > 1;
Si estas dos consultas no devuelven nada, entonces toma la tabla termporal creada y haz esto:
Código MySQL:
Ver original
  1. INSERT INTO prueba (fecha, mensaje)
  2. SELECT fecha, mensaje
  3. FROM prueba_temp;
y luego
Código MySQL:
Ver original
  1. DROP TABLE prueba_temp;

Una nota final:
Es importante verificar dos cuatro cosas sobre el archivo:
1) Si estás usando Linux o Windows, el comportamiento de los saltos de línea cambia. En un caso se usa un salto de linea ("\n"), y en el segundio retorno de carro (CR) más un salto de línea ("\r\n").
2) Se debe verificar si hay caracteres escapados en los mensajes, porque en ese caso se deberá indicar el ESCAPED BY para que lo tome correctamente.
3) Muy importante: El charset del archivo debe ser UTF-8. Supongo que el que tienes debe serlo, porque de lo contrario ya se te habrías presentado problemas.
4) Finalmente: Los campos de fecha debe n ser almacenados en DATE, DATETIME o TIMESTAMP, y NUNCA en VARCHAR. Para que se cumpla el formato, el archivo debe tener las fechas en el formato estandar AAAA-MM-DD.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 25/03/2015 a las 07:02
  #17 (permalink)  
Antiguo 25/03/2015, 06:42
 
Fecha de Ingreso: marzo-2015
Mensajes: 66
Antigüedad: 9 años, 8 meses
Puntos: 0
Respuesta: duplicate entry ´1403´ for key 'primary'

No solucionado, el error continua, me voy a mirar todos los pasos como me has recomendado

Última edición por noejb; 25/03/2015 a las 06:50

Etiquetas: bases-de-datos-general, duplicate, entry, key, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:15.