Cita:
Iniciado por jolucoes
Se me ocurre que le quites la PRIMARY_KEY al id para que permita duplicados.
En teoría debería dejarte entonces el INSERT. Luego ya compruebas si está o no duplicado, o dónde tira el error.
Un saludo.
Eso no tiene absolutamente ningún sentido. No puedes eliminar una clave primaria. Plantear eso implica que no se entiende el sentido de una PK, ni su criterio de definición, y además no es el fondo del asunto (y menos una solución).
El problema es que está tratando de insertar en una tabla de una base de datos, un conjunto de datos de una fuente externa, sin tomarse la mínima molestia de validar previamente que los datos que están ingresando para asegurarse que son consistentes y que cumplen las restricciones de datos de la base.
Eso es un error total.
Este problema es usual cuando se intenta consolidar datos entre diferentes bases, o bien diferentes fuentes de datos. no es extraño en esa situación que dos conjuntos de datos tengan valores de clave similares (solapamiento de claves), simplemente porque pertenecen a diferentes bases de origen, donde las PK son locales. Entonces tendrás N veces la PK 1, la 39 o la 1065. pero eso no es un error, el error es insertar ese dato sin verificar que no se esté produciendo el solapamiento.
¿Cual es la solución?
Bueno, no puedes simplemente descartar la PK entrante y poner lo restante de cada registro, porque
no puedes asegurar que el resto de los datos no se esté duplicado. Li hicieras eso, podrías procesar el mismo archivo dos veces y te metería dos veces los mismos datos con diferentes PK.
La solución es hacer una preverificación de los datos que represente una clave primaria natural, como por ejemplo, el numero de documento. Si ya existe, no se manda a insertar, si no existe, se inserta.
Si bien eso implicará doble trabajo, al menos será algo seguro.
Finalmente, si los datos entrantes son correctos, y la PK es el documento, y deseas que se inserten sólo aquellos que no existen en base sin necesidad de verificarlos, simplemente usa INSERT IGNORE INTO...
La cláusula IGNORE hará que no se dispare un error si la clave está duplicada, pero tampoco insertará ese registro cuya clave se duplica.
Obviamente, para usar esa cláusula debes estar seguro de que la PK que estás insertando en el campo ID corresponde a la misma persona tanto en el archivo como en la tabla... Si al menos uno no coincide, deberás hacer el otro proceso.