MySQL - tengo perdida de información en mi base de datos

 
Vista:
Imágen de perfil de Hfr
Val: 26
Ha disminuido su posición en 5 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

tengo perdida de información en mi base de datos

Publicado por Hfr (21 intervenciones) el 06/12/2016 17:40:13
hola como estan todos bueno resulta que se me están perdiendo datos de muchas de las tablas de la base de datos, y no se como mitigar eso.
bueno tengo como 60 tablas la tabla maestra que es la papa de todas. ha esta tabla papa, le tengo que hacer un load data infile cada 8 dias porque solicite una replica de esta tabla pero lo que me dieron fue un excel.

cada vez que yo hago el load data en la tabla papa tengo que eliminar con un trunk o con delete todos los registros omitiendo las fk con SET FOREIGN_KEY_CHECKS=0;


ya que si no lo hago el archivo no se carga porque se generan duplicados.
el caso es que cuando hago el

SET FOREIGN_KEY_CHECKS=0;
load data infile "c:/archivop.txt" into mi tabla character ser latin1;

en algunas tablas se pierden registros, yo quisiera no depender de ese archivo de excel pero no hay de otra.
lo que hice ahora fue eliminar todas las llaves foraneas temporalmente, pero en realidad no se que hacer para cuando haga el load data, no se pierdan datos.

agradezco una manito y sus comentarios
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

tengo perdida de información en mi base de datos

Publicado por Rafael (97 intervenciones) el 07/12/2016 09:00:49
Yo subiría el Excel a una tabla paralela, sin constraints, digamos una copia de tu tabla maestra...

Una vez los datos en ella realizaría el UPDATE E INSERT desde la tabla paralela a la maestra...

Así no perderías los registros anteriores al Excel...

Ejemplo después de subir a la tabla paralela:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
UPDATE tabla_maestra T1
       JOIN tabla_paralela T2
	     ON T1.prmary_key = T2.primary_key
SET T1.campo_1 = T2.campo_1
, T1.campo_2 = T2.campo_2
, ...
, T1.campo_n = T2.campo_n;
 
INSERT INTO tabla_maestra
SELECT *
FROM   tabla_paralela T2
WHERE  NOT EXISTS (SELECT 1
                   FROM   tabla_maestra T1
				   WHERE  T1.prmary_key = T2.primary_key);

con EL UPDATE actualizamos los valores de los datos que ya teníamos y vienen modificados en el nuevo fichero...
con el INSERT agregamos los datos que no teníamos....

No procede el DELETE para que no pierdas datos...

Saludos
Pd. Si la información te sirve a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Hfr
Val: 26
Ha disminuido su posición en 5 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

tengo perdida de información en mi base de datos

Publicado por Hfr (21 intervenciones) el 15/12/2016 18:58:35
Hola Rafael,
que pena no contestar antes pero, me asignaron unos cambios en la vista de uno de los proyectos y me tarde bastante en terminarlos.
pero bn ya realice la prueba del codigo me dejaste y funciona a la perfección, en el archivo excel tenia 2106 registro en tabla maestra tenia 20063 registros y con el QUERY que me diste me subió de una 2108 la tabla maestra. incluyendo los dos registros de test. sin la necesidad de hacer un TRUNCATE o delete total a tabla maestra
muchas gracias...
ahora simplemente elimino los datos de tabla clonn y los cargo nuevamente con el archivo.csv Y ejecuto el QUERY
y listo el pollo , ahora volver a activar el las llaves foráneas...


Nuevamente muchas gracias..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Hfr
Val: 26
Ha disminuido su posición en 5 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

tengo perdida de información en mi base de datos

Publicado por Hfr (21 intervenciones) el 15/12/2016 20:59:58
aqui le dejo parte del srp que use


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*AQUI CLONAMOS  LA TABLA   */
 
 
> create table  clonnnaj  select * from  nnja ;
 
/*   AQUI HACEMOS EL UPDATE*/
UPDATE nnja T1
       JOIN clonnnaj T2
	     ON T1.cod_id= T2.cod_id
SET T1.cod_id= T2.cod_id,
 
T1.frecuencia_1=T2.frecuencia_1,
T1.frecuencia_2=T2.frecuencia_2,
T1.fecha=T2.fecha,
T1.nomc=T2.nomc;
 
// AQUI EL Insert. 
 
 
INSERT INTO nnja
SELECT *
FROM   clonnnaj T2
WHERE  NOT EXISTS (SELECT cod_id
                   FROM   nnja T1
				   WHERE  T1.cod_id= T2.cod_id);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar