OBSERWACJA #1
Nie powinieneś robić REPLACE
ponieważ jest to mechaniczne DELETE
i INSERT
.
Jako Dokumentacja MySQL mówi o WYMIANIE
Paragraf 2
Paragraf 5
Użycie REPLACE spowoduje odrzucenie ustalonych wartości dla TEST_ID, których nie można automatycznie użyć ponownie.
OBSERWACJA #2
Układ tabeli nie obsługuje zalewkowania zduplikowanych kluczy
Jeśli nazwa jest unikalna, tabela powinna wyglądać tak
UKŁAD #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`)
)
Jeśli nazwa pozwala na wiele wartości, tabela powinna być ułożona w ten sposób
UKŁAD #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`)
)
PROPONOWANE ROZWIĄZANIE
Użyj tymczasowego stołu, aby wszystko złapać. Następnie wykonaj dużą INSERT z tabeli tymczasowej w oparciu o układ
UKŁAD #1
Zastąp VALUE
dla duplikatu NAME
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`;
UKŁAD #2
Ignoruj zduplikowane (NAME,VALUE)
wiersze
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`;
Aktualizacja
jeśli musimy unikać tworzenia i upuszczania tabeli za każdym razem. możemy OBCIĄGNĄĆ OBCIĄGNĄĆ tabeli przed lub po użyciu instrukcji INSERT...INTO. Dlatego nie musimy tworzyć tabeli następnym razem.