POZOR #1
Neměli byste provádět REPLACE
protože se jedná o mechanické DELETE
a INSERT
.
Jako Dokumentace MySQL říká o REPLACE
Odstavec 2
Odstavec 5
Použití REPLACE odstraní zavedené hodnoty pro TEST_ID, které nelze automaticky znovu použít.
POZOR #2
Rozvržení tabulky nebude podporovat zachycování duplicitních klíčů
Pokud je název jedinečný, tabulka by měla být uspořádána takto
ROZVRŽENÍ #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`)
)
Pokud název umožňuje více hodnot, tabulka by měla být uspořádána takto
ROZVRŽENÍ #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`)
)
NAVRHOVANÉ ŘEŠENÍ
K zachycení všeho použijte tabulku temp. Poté proveďte velký INSERT z dočasné tabulky na základě rozložení
ROZVRŽENÍ #1
Nahraďte VALUE
pro duplikát 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`;
ROZVRŽENÍ #2
Ignorovat duplicitní (NAME,VALUE)
řádky
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`;
Aktualizovat
pokud se potřebujeme vyhnout pokaždé vytváření a pouštění tabulky. můžeme ZKRÁTIT ZKRÁTIT tabulky před nebo po použití příkazu INSERT...INTO. Příště tedy tabulku vytvářet nemusíme.