values update multiple infile ejemplo duplicate data all mysql load-data-infile on-duplicate-key

mysql - multiple - on duplicate key update php



MySQL LOAD DATA INFILE con ON DUPLICATE KEY UPDATE (2)

Estos pasos se pueden usar para emular esta funcionalidad:

1) Crea una nueva tabla temporal.

CREATE TEMPORARY TABLE temporary_table LIKE target_table;

2) Opcionalmente, suelte todos los índices de la tabla temporal para acelerar las cosas.

SHOW INDEX FROM temporary_table; DROP INDEX `PRIMARY` ON temporary_table; DROP INDEX `some_other_index` ON temporary_table;

3) Cargue el CSV en la tabla temporal

LOAD DATA INFILE ''your_file.csv'' INTO TABLE temporary_table FIELDS TERMINATED BY '','' OPTIONALLY ENCLOSED BY ''"'' (field1, field2);

4) Copie los datos usando ON DUPLICATE KEY UPDATE

SHOW COLUMNS FROM target_table; INSERT INTO target_table SELECT * FROM temporary_table ON DUPLICATE KEY UPDATE field1 = VALUES(field1), field2 = VALUES(field2);

5) Eliminar la tabla temporal

DROP TEMPORARY TABLE temporary_table;

El uso de SHOW INDEX FROM y SHOW COLUMNS FROM este proceso puede automatizarse para cualquier tabla dada.

Para cargar grandes cantidades de datos en MySQL, LOAD DATA INFILE es, de lejos, la opción más rápida. Desafortunadamente, aunque esto se puede utilizar de una manera INSERT IGNORE o REPLACE funciona, ON DUPLICATE KEY UPDATE no es compatible actualmente.

Sin embargo, ON DUPLICATE KEY UPDATE tiene ventajas sobre REPLACE . Este último hace un borrado y un inserto cuando existe un duplicado. Esto trae sobrecarga para la administración de claves. Además, los identificadores de autoincrement no se mantendrán iguales en un reemplazo.

¿Cómo se puede emular ON DUPLICATE KEY UPDATE cuando se utiliza LOAD DATA INFILE?


podemos reemplazar primero (dos pasos) con la consulta individual inferior en el procedimiento compartido por (Jan).

1) y 2) podemos crear una nueva tabla con la misma estructura de referencia y sin ningún índice.

CREATE TEMPORARY TABLE temporary_table SELECT * FROM target_table WHERE 1 = 0;

En lugar de..

1) Crea una nueva tabla temporal.

CREATE TEMPORARY TABLE temporary_table LIKE target_table;

2) Opcionalmente, suelte todos los índices de la tabla temporal para acelerar las cosas.

MOSTRAR ÍNDICE DE tabla_temporal; DROP INDEX PRIMARY ON temporary_table; ÍNDICE DE CAÍDA some_other_index ON temporary_table;