Ver Mensaje Individual
  #16 (permalink)  
Antiguo 25/03/2015, 06:06
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
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