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

error primary key duplicada

Estas en el tema de error primary key duplicada en el foro de Mysql en Foros del Web. Hola, estoy empezando a practicar y aprender mysql y tengo un problema. tengo 2 bases de datos, "A" Y "B". en la BD "A" tengo ...
  #1 (permalink)  
Antiguo 26/09/2014, 03:42
 
Fecha de Ingreso: diciembre-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
error primary key duplicada

Hola,

estoy empezando a practicar y aprender mysql y tengo un problema.

tengo 2 bases de datos, "A" Y "B".

en la BD "A" tengo todos los datos y en la BD "B", no hay nada.

1º exporto los datos de A.
2º importo los datos a B.

3º Error de primary key duplicada.

alguien podría decirme porque? si la base de datos B esta vacía no debería ser un problema.

NOTA: la BD A tiene una serie de tablas con una serie de campos dentro.
la BD B tiene las mismas tablas con los mismos campos pero algunos más
no estan en la base de datos A.

Si necesitais más datos no dudeis en preguntarme.
  #2 (permalink)  
Antiguo 26/09/2014, 04:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: error primary key duplicada

Sin duda hacen falta mas datos?


Como haces ?
Cita:
1º exporto los datos de A.
2º importo los datos a B.
Cita:
NOTA: la BD A tiene una serie de tablas con una serie de campos dentro.
la BD B tiene las mismas tablas con los mismos campos pero algunos más
no estan en la base de datos A.
Especifica.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 26/09/2014, 04:59
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: error primary key duplicada

Es un error básico: No puedes importar una base A sobre una base B, aunque tengas las mismas estructuras, si la base B ya tiene datos. Lo que corresponde hacer es una actualizacion por migración. En todo caso lo que se llamaría "sincronización", en tanto la base B sea un espejo de la A.
TE en cuenta que si ambas bases son productivas, esto es que se usan, pero en servidores diferentes y accedidas desde puntos diferentes, los mismos ID (las pK de la tabla) de registros entre tablas iguales en cada base, pueden corresponder a datos diferentes de clientes, productos o servicios.

En definitiva, no puedes hacer una simple importación, sino que debes hacer un proceso que inserte los registros que no existen o que no pertenezcan al mismo conjunto de datos de la base B.
¿Se entiende.

Te advierto:
1) No es simple.
2) No lleva poco tiempo.
3) Necesitarás realizar pruebas con replicas de ambas bases para evitar errores catastróficos con los datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 26/09/2014, 05:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: error primary key duplicada

Cita:
en la BD "A" tengo todos los datos y en la BD "B", no hay nada.
Parece que en B no hay nada, insisto nos falta información, obviamente si hay datos en B estariamos en el caso descrito por @gnzsoloyo.

Incluso si no hay datos pero había en el pasado y no se ha hecho un adequado TRUCATE de las tablas para que los autoinc se reseteen a 1, tambien daria problemas segun como se importen los datos.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 26/09/2014, 12:07
 
Fecha de Ingreso: diciembre-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: error primary key duplicada

hola, primero muchas gracias a los dos por vuestra amabilidad y por las respuestas. A ver si puedo explicarme mejor sin enrrollarme mucho y sin alargar mi respuesta demasiado.

para quimfv:

1º exporto la bd de forma normal y por defecto.
- Sin drop table y con insert into.
- tambien he probado con insert delayed into
- tambien he probado con insert ignore into
.
- tipo de exportacion sin compresion en modo .sql.

2º en los 3 casos ha habido fallo, en el primero el error de PK duplicada (motivo de mi consulta) y en los otros dos el error es que la importación en la bd B se produce correctamente pero no me inserta ningun dato.

- estructura y datos

Agregar sentencias:

Agregar sentencia CREATE TABLE
Agregar sentencia CREATE VIEW
Agregar sentencia CREATE PROCEDURE / FUNCTION / EVENT

Opciones CREATE TABLE:
IF NOT EXISTS
AUTO_INCREMENT

funcion al volcar los datos: INSERT


Sintáxis a utilizar al insertar datos:

no incluir nombres de columna en toda sentencia INSERT
Ejemplo: INSERT INTO nombre_tabla (columna_A,columna_B,columna_C) VALUES (1,2,3)
no incluir múltiples filas en cada sentencia INSERT
Ejemplo: INSERT INTO nombre_tabla VALUES (1,2,3), (4,5,6), (7,8,9)
si, los dos anteriores

NOTA: como comprobaras, todo está por defecto.

3º creo que un posible fallo sea debido a tu 2º mensaje, algo que tras este mensaje voy a probar. y es que en la base de datos B habia datos que yo simplemente y por novato he "VACIADO". con lo cual, creo o entiendo que en la exportacion deberia seleccionar "truncate". ya os contare el resultado lo antes posible.

para gnzsoloyo: (y tambien para quimfv)

voy a explicar con detalle algunas cosas. que os valdran a los dos.

1º la base de datos original "A" pertenece a una tienda online de prestashop version 1.1

2º la base de datos de destino "B" pertenece a una tienda online de prestashop version 1.4. ésta se encuentra limplia, es decir tal y como queda justo después de la instalacion.

3º ¿que era lo que yo quería? pues que debido a las diferencias que existen entre una version de la tienda y la otra, la actualizacion de la tienda 1.1 me daba muchos errores PHP, pese a seguir paso por paso, los puntos para llegar a la actualizacion de la version 1.4.

4º idea tonta mía, pues me dije, bueno cojo la bd de la v1.1, exporto los datos, y los importo a la bd de la v1.4.

5º conclusion, FALLO POR PK DUPLICADA. nuevamente por novato.

NOTA: espero haber sido lo suficientemente claro, y a ver si sabeis, si es posible resolver este problema de forma sencilla o si como me dices amablemente tu, gnzsoloyo, pues tengo que hacer un script complejo.

Aunque si me adelanto en que, en mi caso no quiero sincronizar ambas bases de datos sino pasar los datos de una a la otra.

de estaforma y una vez con dichos datos en la v1.4, esta version de prestashop ya tiene un modulo auto_actualizador para llegar hasta la version 1.6.

Nuevamente, muchisimas gracias a los dos por vuestra infinita paciencia y por vuestras respuestas anteriores. Espero que este mensaje no os resulte una biblia ilegible y, de serlo, mil disculpas de antemano.

Última edición por MEPALZA30; 26/09/2014 a las 12:38 Razón: error gramatical
  #6 (permalink)  
Antiguo 26/09/2014, 12:45
 
Fecha de Ingreso: diciembre-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: error primary key duplicada

Hola de nuevo, ya estoy aqui.

Acabo de probar el tema del truncate. os pongo como quedo la base de datos tras la exportacion.
Código MySQL:
Ver original
  1. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  2. SET time_zone = "+00:00";
  3.  
  4.  
  5. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  6. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  7. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  8. /*!40101 SET NAMES utf8 */;
  9.  
  10. --
  11. -- Base de datos: `toldosyulesoriginal`
  12. --
  13.  
  14. -- --------------------------------------------------------
  15.  
  16. --
  17. -- Estructura de tabla para la tabla `ps_access`
  18. --
  19.  
  20. CREATE TABLE IF NOT EXISTS `ps_access` (
  21.   `id_profile` int(10) unsigned NOT NULL,
  22.   `id_tab` int(10) unsigned NOT NULL,
  23.   `view` int(11) NOT NULL,
  24.   `add` int(11) NOT NULL,
  25.   `edit` int(11) NOT NULL,
  26.   `delete` int(11) NOT NULL
  27. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  28.  
  29. --
  30. -- Truncar tablas antes de insertar `ps_access`
  31. --
  32.  
  33. TRUNCATE TABLE `ps_access`;
bien tras la exportacion, he probado a importar esta base de datos y el resultado ha sido el mismo, pk duplicado

Última edición por gnzsoloyo; 26/09/2014 a las 12:51
  #7 (permalink)  
Antiguo 26/09/2014, 12:49
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: error primary key duplicada

Un error de clave duplicada es un error de diagnóstico simple: Uno o más registros de alguna de las tablas ya existen en la tabla destino.
Ahora bien, esto se puede dar de dos formas:

1) Estás insertando dos veces el mismo registro, o bien insertando un registro con el mismo valor de PK existente en la tabla.
2) Existe en la tabla destino algún campo o conjunto de campos declarados como UNIQUE, donde al menos dos registros de los datos que se insertan no respetan esa restricción.

En cualquiera de las dos posibilidades, no importa cuantas veces lo intentes, ni las vueltas que le des. Si los valores de PK está duplciados, por la razón que fuese, seguirá produciendose el problema.
Lo central que debes entender es que sin importar las descripciones de proceso que nos proporciones, el problema es de datos en tu base, y por consecuencia sólo los podrás resolver analizando los datos que puedan estar en la tabla origen y que generen el fallo.
Para darte nosotros un diagnóstico, necesitaríamos tener el script del backup de datos junto con el script de backup de la estructura de ambas bases, y realizar algunas pruebas.
Sin eso, cualquier otra cosa que te digamos caerá siempre en lo que te comento al principio de este pos.

Nota:
Revisando tu script en ese último post te comento que ese script no nos ayuda en nada, porque esa tabla no contiene PK alguna en su definición, y por consecuencia no podría generarte ese error.

Postea el script completo de la estructura de base, por lo menos.
__________________
¿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 27/09/2014, 03:26
 
Fecha de Ingreso: diciembre-2011
Mensajes: 15
Antigüedad: 13 años
Puntos: 1
Respuesta: error primary key duplicada

Hola de nuevo,

bueno efectivamente, me has dejado bien claro que no hay solucion facil. asi que voy a analizar las 20 tablas que me dan ese problema y a estudiar bien como resolverlo.

como bien dices será una tarea complicada porque estoy aprendiendo desde hace bien poco.

en cualquier caso muchisimas gracias de nuevo por tu paciencia y tu amabilidad.

saludos
  #9 (permalink)  
Antiguo 27/09/2014, 13:02
Avatar de kivpson  
Fecha de Ingreso: marzo-2011
Mensajes: 37
Antigüedad: 13 años, 8 meses
Puntos: 7
Respuesta: error primary key duplicada

Hola, un paso sencillo para copiar todo el contenido de una tabla a otra es:

Código MySQL:
Ver original
  1. INSERT INTO tabla1(campo1, campo2, campo3)
  2. (SELECT t2.campo1,  t2.campo2, t3.campo3
  3. FROM tabla2 t2)

Si las tablas proceden de otra DB podrías importar la table completa que deseas copiar en la DB destino, realizas el query, verificas la integridad de datos y eliminas la tabla importada, no es un método ortodoxo pero puede que solvente tu problema de migración.

Saludos.

Etiquetas: campo, duplicada, key, primary, 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 02:24.