OBSERVATION #1
Vous ne devriez pas faire REPLACE
car il s'agit d'un DELETE
mécanique et INSERT
.
Comme la Documentation MySQL dit à propos de REMPLACER
Paragraphe 2
Paragraphe 5
L'utilisation de REPLACE supprimera les valeurs établies pour TEST_ID qui ne peuvent pas être automatiquement réutilisées.
OBSERVATION #2
La disposition du tableau ne prend pas en charge le piégeage des clés en double
Si un nom est unique, le tableau doit être présenté comme ceci
MISE EN PAGE #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 nom autorise plusieurs valeurs, le tableau doit être présenté comme ceci
MISE EN PAGE #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`)
)
SOLUTION PROPOSÉE
Utilisez une table temporaire pour tout saisir. Ensuite, effectuez un gros INSERT à partir de la table temporaire en fonction de la disposition
MISE EN PAGE #1
Remplacez la VALUE
pour un NAME
en double
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`;
MISE EN PAGE #2
Ignorer le doublon (NAME,VALUE)
lignes
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`;
Mettre à jour
si nous devons éviter la création et la suppression de la table à chaque fois. nous pouvons TRUNCATE TRUNCATE la table avant ou après l'utilisation de l'instruction INSERT...INTO. Par conséquent, nous n'aurons pas à créer la table la prochaine fois.