OBSERVATIE #1
U moet REPLACE
niet doen omdat het een mechanische DELETE
. is en INSERT
.
Als de MySQL-documentatie zegt over VERVANGEN
Paragraaf 2
Paragraaf 5
Als u REPLACE gebruikt, worden bestaande waarden voor TEST_ID weggegooid die niet automatisch opnieuw kunnen worden gebruikt.
OBSERVATIE #2
De tabellay-out ondersteunt het overvullen van dubbele sleutels niet
Als een naam uniek is, moet de tabel als volgt worden ingedeeld
LAY-OUT #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`)
)
Als een naam meerdere waarden toestaat, moet de tabel als volgt worden ingedeeld
LAY-OUT #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`)
)
VOORGESTELDE OPLOSSING
Gebruik een tijdelijke tabel om alles op te vangen. Voer vervolgens een grote INSERT uit vanuit de tijdelijke tabel op basis van lay-out
LAY-OUT #1
Vervang de VALUE
voor een dubbele 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`;
LAY-OUT #2
Negeer dubbele (NAME,VALUE)
rijen
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`;
Bijwerken
als we het maken en neerzetten van de tabel elke keer moeten vermijden. we kunnen AFSLUITEN de tabel voor of na het gebruik van de INSERT...INTO-instructie. Daarom hoeven we de volgende keer de tabel niet te maken.