2011-02-11 24 views

Respuesta

1

como se ha dicho here por miembro del equipo de documentación de MySQL:

It's not atomic. The records loaded prior to the error will be in the 
table. 

arround del trabajo es para importar datos a la mesa dedicada y luego ejecutar INSERT INTO ... SELECT ... que estará operación atómica. En grandes conjuntos de datos, este es un problema potencial debido a una transacción larga.

+0

Tenga en cuenta que esto se aplica a las tablas MyISAM, que no admite transacciones. InnoDB al menos trata LOAD DATA ... como una transacción. – nos

1

El MySQL manual indica que MySqlBulkLoader es un contenedor de 'LOAD DATA INFILE'. Mientras mira a la documentación 'CARGA DE DATOS INFILE' Me di cuenta de este párrafo:

Si especifica IGNORE, registros de entrada que duplican un registro existente en un valor de clave única se omiten. Si no especifica cualquiera de las opciones, el comportamiento depende de si se especifica la palabra clave LOCAL . Sin LOCAL, se produce un error cuando se encuentra un valor de clave duplicado , y se ignora el resto del archivo de texto . Con LOCAL, el comportamiento predeterminado de es el mismo que si se especifica IGNORE ; esto se debe a que el servidor no tiene forma de detener la transmisión del archivo en el medio de la operación.

No encontré discusión sobre las transacciones, pero el párrafo anterior indicaría que las transacciones no son posibles.

Una solución alternativa sería importar los datos en una tabla de importación y luego utilizar un procedimiento almacenado por separado para procesar los datos mediante transacciones en la tabla deseada.

Así que en Answ

Cuestiones relacionadas