Av din kod framgår det att din "unika identifierare" (åtminstone för denna infogning) är den sammansatta
Om du definierar en sådan UNIQUE
knappa in din databas och sedan LADDA DATA
med IGNORE
nyckelordet ska göra exakt vad du behöver:
ALTER TABLE tbl_reading
ADD UNIQUE KEY (READING_DATE, READING_TIME, READING_ADDRESS)
;
LOAD DATA INFILE '/path/to/csv'
IGNORE
INTO TABLE tbl_reading
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY ''
LINES
TERMINATED BY '\r\n'
(@rec_0, @rec_1, @rec_2, @rec_3, @rec_4, @rec_5, @rec_6, @rec_7, @rec_8)
SET
READING_DATE = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_0), '???'), '%Y/%m/%d'),
READING_TIME = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_1), '???'), '%H:%i:%s'),
READING_ADDRESS = TRIM(@rec_2),
CO2_SET_VALUE = TRIM(@rec_3),
CO2_PROCESS_VALUE = TRIM(@rec_4),
TEMP_SET_VALUE = TRIM(@rec_5),
TEMP_PROCESS_VALUE = TRIM(@rec_6),
RH_SET_VALUE = TRIM(@rec_7),
RH_PROCESS_VALUE = TRIM(@rec_8)
;
(Var '???'
ersätts med strängar som representerar datum- och tidsformaten i din CSV).
Observera att du verkligen borde lagra READING_DATE
och READING_TIME
tillsammans i en enda DATETIME
eller TIMESTAMP
kolumn:
ALTER TABLE tbl_reading
ADD COLUMN READING_DATETIME DATETIME AFTER READING_TIME,
ADD UNIQUE KEY (READING_DATETIME, READING_ADDRESS)
;
UPDATE tbl_reading SET READING_DATETIME = STR_TO_DATE(
CONCAT(READING_DATE, ' ', READING_TIME),
'%Y/%m/%d %H:%i:%s'
);
ALTER TABLE tbl_reading
DROP COLUMN READING_DATE,
DROP COLUMN READING_TIME
;
I så fall SET
satsen i LOAD DATA
kommandot skulle inkludera istället:
READING_DATETIME = STR_TO_DATE(CONCAT(TRIM(@rec_0), ' ', TRIM(@rec_1)), '???')