OBSERVACIÓN #1
No debe hacer REPLACE
porque es un DELETE
mecánico y INSERT
.
Como la Documentación de MySQL dice sobre REEMPLAZAR
Párrafo 2
Párrafo 5
El uso de REPLACE eliminará los valores establecidos para TEST_ID que no se pueden reutilizar automáticamente.
OBSERVACIÓN #2
El diseño de la tabla no admitirá la captura de claves duplicadas
Si un nombre es único, la tabla debe diseñarse así
DISEÑO #1
CREATE TABLE `oxygen_domain`.`TEST` (
`TEST_ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`TEST_ID`),
KEY (`NAME`)
)
Si un nombre permite varios valores, la tabla debe diseñarse así
DISEÑO #2
CREATE TABLE `oxygen_domain`.`TEST` (
`TEST_ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`TEST_ID`),
KEY (`NAME`,`VALUE`)
)
SOLUCIÓN PROPUESTA
Use una tabla temporal para capturar todo. Luego, realice una gran INSERCIÓN desde la tabla temporal según el diseño
DISEÑO #1
Reemplace el VALUE
para un NAME
duplicado
USE oxygen_domain
DROP TABLE IF EXISTS `TESTLOAD`;
CREATE TABLE `TESTLOAD` SELECT NAME,VALUE FROM TEST WHERE 1=2;
LOAD DATA LOCAL INFILE 'C:/testData.txt'
INTO TABLE `TESTLOAD`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);
INSERT INTO `TEST` (NAME, VALUE)
SELECT NAME, VALUE FROM `TESTLOAD`
ON DUPLICATE KEY UPDATE VALUE = VALUES(VALUE);
DROP TABLE `TESTLOAD`;
DISEÑO #2
Ignorar duplicado (NAME,VALUE)
filas
USE oxygen_domain
DROP TABLE IF EXISTS `TESTLOAD`;
CREATE TABLE `TESTLOAD` SELECT NAME,VALUE FROM TEST WHERE 1=2;
LOAD DATA LOCAL INFILE 'C:/testData.txt'
INTO TABLE `TESTLOAD`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);
INSERT IGNORE INTO `TEST` (NAME, VALUE)
SELECT NAME, VALUE FROM `TESTLOAD`;
DROP TABLE `TESTLOAD`;
Actualizar
si necesitamos evitar la creación y eliminación de la tabla cada vez. podemos TRUNCATE TRUNCATE la tabla antes o después de usar la instrucción INSERT...INTO. Por lo tanto, no tenemos que crear la tabla la próxima vez.