ЗАБЕЛКА №1
Не трябва да правите REPLACE
защото е механичен DELETE
и INSERT
.
Като Документацията на MySQL казва за REPLACE
Параграф 2
Параграф 5
Използването на REPLACE ще изхвърли установените стойности за TEST_ID, които не могат да бъдат използвани автоматично.
ЗАБЕЛКА №2
Оформлението на таблицата няма да поддържа улавяне на дублирани ключове
Ако името е уникално, таблицата трябва да бъде подредена така
Оформление №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`)
)
Ако едно име позволява множество стойности, таблицата трябва да бъде подредена така
Оформление №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`)
)
ПРЕДЛОЖЕНО РЕШЕНИЕ
Използвайте временна таблица, за да хванете всичко. След това извършете голямо INSERT от временната таблица въз основа на оформлението
Оформление №1
Заменете VALUE
за дублирано 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`;
Оформление №2
Игнорирайте дублирания (NAME,VALUE)
редове
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`;
Актуализиране
ако трябва да избягваме създаването и отпадането на таблицата всеки път. можем да ОТСЪЩАМЕ ОТРЕЗИ таблицата преди или след използването на оператор INSERT...INTO. Следователно не е нужно да създаваме таблицата следващия път.